Table of Contents
- 1 Integration of Dubbo and SpringBoot
- 2 Public RPC interface project
- 3. Server engineering
- 4. Consumer Engineering
- 5. Project call verification
1 Integration of Dubbo and SpringBoot
Realize the integration of Dubbo and Spring Boot based on Zookeeper, relying on import
<properties> <dubbo-version>2.7.8</dubbo-version> <spring-boot.version>2.3.0.RELEASE</spring-boot.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Apache Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-bom</artifactId> <version>${dubbo-version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo-version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo-version}</version> </dependency> <!-- Dubbo core components --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <!--Spring Boot dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> </dependency> <!-- Zookeeper Client Framework --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <!-- Zookeeper dependencies --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo-version}</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
Dubbo uses version 2.7.8, and Spring Boot uses version 2.3.0.RELEASE.
If there is a problem with the dependent download, you can specify a specific warehouse:
<repositories> <repository> <id>apache.snapshots.https</id> <name>Apache Development Snapshot Repository</name> <url>https://repository.apache.org/content/repositories/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
2 Public RPC interface project
In order to facilitate the reference of the RPC interface between the client and the server, the RPC interface is uniformly encapsulated here.
An order service interface is defined for testing and verification.
public interface OrderService {<!-- --> /** * Get order details * @param orderId * @return */ String getOrder(Long orderId); }
3. Server project
- engineering structure
- POM dependencies
<dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo-version}</version> </dependency> <!-- Dubbo core dependencies --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <!-- public RPC interface dependency --> <dependency> <groupId>com.oldlu</groupId> <artifactId>dubbo-spring-interface</artifactId> <version>${project.version}</version> </dependency> </dependencies>
- RPC service interface
@DubboService(version = "${dubbo.spring.provider.version}") public class OrderServiceImpl implements OrderService {<!-- --> /** * Service port */ @Value("${server.port}") private String serverPort; @Value("${dubbo. spring. provider. version}") private String serviceVersion; /** * Get order details * @param orderId * @return */ public String getOrder(Long orderId) {<!-- --> String result = "get order detail ,orderId=" + orderId + ",serverPort=" + serverPort + ",serviceVersion=" + serviceVersion; System.out.println(result); return result; } }
Through the DubboService annotation, it is declared as an RPC service, the version can identify the specific version number, and the consumer needs to match and keep consistent.
- Engineering configuration
# service port server.port=18081 # application name spring.application.name=dubbo-spring-provider # Dubbo service scanning path dubbo.scan.base-packages=com.oldlu # Dubbo communication protocol dubbo.protocol.name=dubbo # The port provided by the Dubbo service, configured as -1, represents a random port, the default is 20880 dubbo.protocol.port=-1 ## Dubbo Registrar configuration information dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache dubbo.spring.provider.version=1.0.0
- Spring Boot starter
@SpringBootApplication @ComponentScan(basePackages = {<!-- -->"com.itheima"}) public class DubboSpringProviderApplication {<!-- --> public static void main(String[] args) {<!-- --> SpringApplication.run(DubboSpringProviderApplication.class, args); } }
?
4. Consumer project
- engineering structure
- POM dependencies:
<dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo-version}</version> </dependency> <!-- public RPC interface dependency --> <dependency> <groupId>com.itheima</groupId> <artifactId>dubbo-spring-interface</artifactId> <version>${project.version}</version> </dependency> </dependencies>
?
- consumer call
@Controller @RequestMapping("/order") public class OrderController {<!-- --> private final Logger logger = LoggerFactory. getLogger(getClass()); /** * Order service interface */ @DubboReference(version = "${dubbo.spring.provider.version}") private OrderService orderService; /** * Get order details interface * @param orderId * @return */ @RequestMapping("/getOrder") @ResponseBody public String getOrder(Long orderId) {<!-- --> String result = null; try {<!-- --> result = orderService. getOrder(orderId); }catch(Exception e) {<!-- --> logger. error(e. getMessage(), e); } return result; } }
?
- Engineering configuration
# service port server.port=18084 #service name spring.application.name=dubbo-spring-consumer #Service version number dubbo.spring.provider.version=1.0.0 #Consumer register configuration information dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
- Spring Boot starter
@SpringBootApplication @ComponentScan(basePackages = {<!-- -->"com.itheima"}) public class DubboSpringConsumerApplication {<!-- --> public static void main(String[] args) {<!-- --> SpringApplication.run(DubboSpringConsumerApplication.class, args); } }
?
5. Project call verification
-
Start the ZK Registry
-
Start the server and run DubboSpringProviderApplication
-
Start the consumer and run DubboSpringConsumerApplication
-
Request to get order interface, address: http://127.0.0.1:18084/order/getOrder?orderId=1001
The call is successful: