当前位置: 首页>编程语言>正文

spring cloud alibaba dubbo 实现服务降级 spring cloud alibaba集成dubbo

通过优锐课核心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用户,还是相反,经验都应该是无缝的。

 


https://www.xamrdz.com/lan/5h61962516.html

相关文章: