H__D  

  本章介绍SpringBoot与与Dubbo。

  Apache Dubbo 是一个基于Java的高性能,轻量级的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程呼叫,容错和负载平衡以及自动服务注册和发现。

Dubbo服务提供商

  1、新建一个项目SpringBoot Web项目,引入Dubbo依赖

1 <!-- Dubbo Spring Boot Starter -->
2 <dependency>
3     <groupId>org.apache.dubbo</groupId>
4     <artifactId>dubbo-spring-boot-starter</artifactId>
5     <version>2.7.5</version>
6 </dependency>

    完整pom文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.test</groupId>
 8     <artifactId>test-springboot-dubbo-provider</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>2.1.8.RELEASE</version>
15     </parent>
16 
17     <properties>
18         <dubbo.version>2.7.5</dubbo.version>
19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
21         <java.version>1.8</java.version>
22     </properties>
23 
24     <dependencies>
25 
26         <dependency>
27             <groupId>org.springframework.boot</groupId>
28             <artifactId>spring-boot-starter-web</artifactId>
29         </dependency>
30 
31         <!-- Dubbo Spring Boot Starter -->
32         <dependency>
33             <groupId>org.apache.dubbo</groupId>
34             <artifactId>dubbo-spring-boot-starter</artifactId>
35             <version>${dubbo.version}</version>
36         </dependency>
37 
38         <dependency>
39             <groupId>org.springframework.boot</groupId>
40             <artifactId>spring-boot-starter-test</artifactId>
41             <scope>test</scope>
42         </dependency>
43 
44     </dependencies>
45 
46 
47     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->
48     <build>
49         <plugins>
50             <plugin>
51                 <groupId>org.springframework.boot</groupId>
52                 <artifactId>spring-boot-maven-plugin</artifactId>
53             </plugin>
54         </plugins>
55     </build>
56 
57 </project>
View Code

    目录如下:

      

  2、编写配置文件application.properties

 1 # spring应用名
 2 # Spring boot application
 3 spring.application.name=dubbo-auto-configuration-provider-demo
 4 # Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
 5 dubbo.scan.base-packages=com.test.springboot.dubbo.provider.service
 6 
 7 # Dubbo应用:dubbo应用吗默认值是spring应用名
 8 # Dubbo Application
 9 ## The default value of dubbo.application.name is ${spring.application.name}
10 ## dubbo.application.name=${spring.application.name}
11 
12 # Dubbo协议
13 # Dubbo Protocol
14 dubbo.protocol.name=dubbo
15 dubbo.protocol.port=12345
16 
17 # 不在zookeeper上注册服务
18 ## Dubbo Registry
19 dubbo.registry.address=N/A

    其中采用了dubbo协议,在12345端口通信,不再zookeeper上注册服务

  3、编写DemoService接口

1 package com.test.springboot.dubbo.provider.service;
2 
3 public interface DemoService {
4 
5     String sayHello(String name);
6 
7 }

  4、编写实现接口DefaultDemoService,它实现了接口DemoService

 1 package com.test.springboot.dubbo.provider.service;
 2 
 3 import org.apache.dubbo.config.annotation.Service;
 4 import org.springframework.beans.factory.annotation.Value;
 5 
 6 // 被扫描为dubbo服务
 7 @Service(version = "1.0.0")
 8 public class DefaultDemoService implements DemoService {
 9 
10     /**
11      * The default value of ${dubbo.application.name} is ${spring.application.name}
12      */
13     @Value("${dubbo.application.name}")
14     private String serviceName;
15 
16     public String sayHello(String name) {
17         return String.format("[%s] : Hello, %s", serviceName, name);
18     }
19 
20 }

  5、启动项目,将服务部署起来

 

Dubbo服务使用者

  1、新建一个新项目SpringBoot Web项目,引入Dubbo依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.test</groupId>
 8     <artifactId>test-springboot-dubbo-consumer</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11 
12     <parent>
13         <groupId>org.springframework.boot</groupId>
14         <artifactId>spring-boot-starter-parent</artifactId>
15         <version>2.1.8.RELEASE</version>
16     </parent>
17 
18     <properties>
19         <dubbo.version>2.7.5</dubbo.version>
20         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22         <java.version>1.8</java.version>
23     </properties>
24 
25     <dependencies>
26 
27         <dependency>
28             <groupId>org.springframework.boot</groupId>
29             <artifactId>spring-boot-starter-web</artifactId>
30         </dependency>
31 
32         <!-- Dubbo Spring Boot Starter -->
33         <dependency>
34             <groupId>org.apache.dubbo</groupId>
35             <artifactId>dubbo-spring-boot-starter</artifactId>
36             <version>${dubbo.version}</version>
37         </dependency>
38 
39         <dependency>
40             <groupId>org.springframework.boot</groupId>
41             <artifactId>spring-boot-starter-test</artifactId>
42             <scope>test</scope>
43         </dependency>
44 
45     </dependencies>
46 
47 
48     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->
49     <build>
50         <plugins>
51             <plugin>
52                 <groupId>org.springframework.boot</groupId>
53                 <artifactId>spring-boot-maven-plugin</artifactId>
54             </plugin>
55         </plugins>
56     </build>
57 </project>
pom.xml

    目录结构如下:

        

  2、编写配置文件application.properties

1 spring.application.name: dubbo-auto-configure-consumer-sample

  3、拷贝服务提供者的DemoService接口,接口的类路径不变

1 // 类路径不变
2 package com.test.springboot.dubbo.provider.service;
3 
4 public interface DemoService {
5 
6     String sayHello(String name);
7 
8 }

  4、编写实测试类

 1 @RunWith(SpringRunner.class)
 2 @SpringBootTest
 3 public class TestApplication {
 4 
 5     @Reference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
 6     private DemoService demoService;
 7 
 8     @Test
 9     public void sayHello(){
10         System.out.println(demoService.sayHello("XX"));
11     }
12 
13 }

  5、运行测试类sayHello方法(),效果如下:

    

 

posted on 2020-03-17 21:56  H__D  阅读(347)  评论(0编辑  收藏  举报