通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。
看一下如何在阿里巴巴的Spring Cloud实现中使用这个流行的RPC框架。
Spring Cloud Alibaba
Spring Cloud Alibaba是Alibaba Cloud的Spring Cloud版本。 它由几个阿里巴巴的开源项目Nacos,Sentinel和RocketMQ以及几个阿里云原生商业产品组成,以增强用户在阿里云上的体验。 Spring Cloud Alibaba的新版本还将提供Dubbo作为RPC选择。
Dubbo是一个经过严格实践的RPC框架。 在另一篇文章中,我演示了如何将其与注释一起使用。 该示例使用的是Spring Boot。 Dubbo与Spring Boot紧密集成。 将Dubbo放在Spring Cloud Alibaba上似乎很自然。
在本文中,我们将使用一个简单的echo示例来说明在Spring Cloud Alibaba上使用Dubbo的步骤。
定义Dubbo接口
首先定义一个接口:
1 public interface EchoService {
2
3 String echo(String message);
4
5 }
该接口将向远程客户端公开。 这里的提示是将此接口打包到第二或第三方工件(jar)中,以便该jar可用于spring-cloud-dubbo-sample-api。
实施Dubbo服务
在Maven中创建一个项目
让我们用artifactIdId spring-cloud-dubbo-server-sample创建一个Maven项目。 然后,将依赖项添加到pom.xml中。。
1 <dependencies>
2
3 <!-- Sample API -->
4
5 <dependency>
6
7 <groupId>org.springframework.cloud</groupId>
8
9 <artifactId>spring-cloud-dubbo-sample-api</artifactId>
10
11 <version>${project.version}</version>
12
13 </dependency>
14
15 <!-- Spring Boot dependencies -->
16
17 <dependency>
18
19 <groupId>org.springframework.boot</groupId>
20
21 <artifactId>spring-boot-actuator</artifactId>
22
23 </dependency>
24
25 <!-- Dubbo Spring Cloud Starter -->
26
27 <dependency>
28
29 <groupId>org.springframework.cloud</groupId>
30
31 <artifactId>spring-cloud-starter-dubbo</artifactId>
32
33 </dependency>
34
35 <!-- Spring Cloud Nacos Service Discovery -->
36
37 <dependency>
38
39 <groupId>org.springframework.cloud</groupId>
40
41 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
42
43 </dependency>
44
45 </dependencies>
在上面的pom.xml中:
- spring-cloud-dubbo-sample-api:这是工件ID
- spring-boot-actuator:这是Spring Boot生产就绪的工件
- spring-cloud-starter-dubbo:这是Dubbo Spring Cloud Starter工件
- spring-cloud-starter-alibaba-nacos-discovery:这是Nacos Spring Cloud服务注册表工件
在继续之前,我们需要在定义中添加一个版本:
1 <dependencyManagement>
2
3 <dependencies>
4
5 <!-- Spring Cloud Alibaba dependencies -->
6
7 <dependency>
8
9 <groupId>org.springframework.cloud</groupId>
10
11 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
12
13 <version>0.9.0.RELEASE</version>
14
15 <type>pom</type>
16
17 <scope>import</scope>
18
19 </dependency>
20
21 </dependencies>
22
23 </dependencyManagement>
服务代码实施
这是实现的Java代码:
1 @org.apache.dubbo.config.annotation.Service
2
3 class EchoServiceImpl implements EchoService {
4
5 @Override
6
7 public String echo(String message) {
8
9 return "[echo] Hello, " + message;
10
11 }
12
13 }
@ org.apache.dubbo.config.annotation.Service注释将其声明为Dubbo服务。
配置Dubbo服务
建议的公开服务的方法是使用@DubboComponentScanannotation。
该配置涉及两个部分:Dubbo和Spring Cloud。
1 dubbo:
2
3 scan:
4
5 base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap
6
7 protocol:
8
9 name: dubbo
10
11 # -1 means self-defined
12
13 port: -1
14
15 registry:
16
17 address: spring-cloud://localhost
18
19 spring:
20
21 application:
22
23 name: spring-cloud-alibaba-dubbo-server
24
25 main:
26
27 allow-bean-definition-overriding: true
28
29 cloud:
30
31 nacos:
32
33 # Nacos
34
35 discovery:
36
37 server-addr: 127.0.0.1:8848
Spring Boot应用程序类
这与其他Spring Boot应用程序类相同:
1 @EnableDiscoveryClient
2
3 @EnableAutoConfiguration
4
5 public class DubboSpringCloudServerBootstrap {
6
7 public static void main(String[] args) {
8
9 SpringApplication.run(DubboSpringCloudServerBootstrap.class);
10
11 }
12
13 }
这里唯一值得一提的是,我们应该在此之前启动Nacos服务,以便Nacos可以发现该服务。
实施Dubbo客户
创建spring-cloud-dubbo-client-sample Maven项目
与服务端配置类似,我们需要指定依赖项:
1 <dependencyManagement>
2
3 <dependencies>
4
5 <!-- Spring Cloud Alibaba dependencies -->
6
7 <dependency>
8
9 <groupId>org.springframework.cloud</groupId>
10
11 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
12
13 <version>0.9.0.RELEASE</version>
14
15 <type>pom</type>
16
17 <scope>import</scope>
18
19 </dependency>
20
21 </dependencies>
22
23 </dependencyManagement>
24
25 <dependencies>
26
27 <!-- Sample API -->
28
29 <dependency>
30
31 <groupId>org.springframework.cloud</groupId>
32
33 <artifactId>spring-cloud-dubbo-sample-api</artifactId>
34
35 <version>${project.version}</version>
36
37 </dependency>
38
39 <!-- Spring Boot dependencies -->
40
41 <dependency>
42
43 <groupId>org.springframework.boot</groupId>
44
45 <artifactId>spring-boot-starter-web</artifactId>
46
47 </dependency>
48
49 <dependency>
50
51 <groupId>org.springframework.boot</groupId>
52
53 <artifactId>spring-boot-actuator</artifactId>
54
55 </dependency>
56
57 <!-- Dubbo Spring Cloud Starter -->
58
59 <dependency>
60
61 <groupId>org.springframework.cloud</groupId>
62
63 <artifactId>spring-cloud-starter-dubbo</artifactId>
64
65 </dependency>
66
67 <!-- Spring Cloud Nacos Service Discovery -->
68
69 <dependency>
70
71 <groupId>org.springframework.cloud</groupId>
72
73 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
74
75 </dependency>
76
77 </dependencies>
78
79
与服务端的主要区别在于客户端将是一个使用spring-boot-starter-web的Web Servlet应用程序。
配置客户端
与服务端类似,配置分为两个部分:Dubbo和Spring。
1 dubbo:
2
3 registry:
4
5 address: spring-cloud://localhost
6
7 cloud:
8
9 subscribed-services: spring-cloud-alibaba-dubbo-server
10
11 spring:
12
13 application:
14
15 # Dubbo
16
17 name: spring-cloud-alibaba-dubbo-client
18
19 main:
20
21 # Spring Boot 2.1
22
23 allow-bean-definition-overriding: true
24
25 cloud:
26
27 nacos:
28
29 # Nacos
30
31 discovery:
32
33 server-addr: 127.0.0.1:8848
在这里,我们通过将dubbo.cloud.subscribed-services绑定到spring-cloud-dubbo-server-sample来指定要使用的服务。
- dubbo.cloud.subscribed-services:要订阅多个服务,请使用“,”作为分隔符。
由于它是一个Web应用程序,因此默认端口为8080。 可以通过修改server.port属性来更改。
Spring Boot应用程序类和实现Java代码
分为两个步骤:
1 @EnableDiscoveryClient
2
3 @EnableAutoConfiguration
4
5 @RestController
6
7 public class DubboSpringCloudClientBootstrap {
8
9 @Reference
10
11 private EchoService echoService;
12
13 @GetMapping("/echo")
14
15 public String echo(String message) {
16
17 return echoService.echo(message);
18
19 }
20
21 public static void main(String[] args) {
22
23 SpringApplication.run(DubboSpringCloudClientBootstrap.class);
24
25 }
26
27 }
由于这是一个Web客户端,因此我们可以使用curl进行尝试。 如果我们跑
curl http://127.0.0.1:8080/echo?message=yourmessage
或者我们可以运行Java客户端来获得相同的结果。
We should see the result [echo] Hello, yourmessage
结论
Spring Cloud阿里巴巴现在有两个发行版,其中包括Dubbo。 它们是与Spring Cloud Finchley兼容的0.2.2版本和与Spring Cloud Greenwich兼容的0.9.0版本。 无论你是尝试适应Spring Cloud阿里巴巴的Dubbo用户,还是相反,经验都应该是无缝的。