在优锐课社区有学习到分享笔记,分析了如何在阿里巴巴的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接口
public interface EchoService { String echo(String message);}jar)中,以便该jar可用于spring-cloud-dubbo-sample-api。
实施Dubbo服务
在Maven中创建一个项目
artifactIdId spring-cloud-dubbo-server-sample创建一个Maven项目。 然后,将依赖项添加到pom.xml中。。
<dependencies> <!-- Sample API --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dubbo-sample-api</artifactId> <version>${project.version}</version> </dependency> <!-- Spring Boot dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <!-- Dubbo Spring Cloud Starter --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!-- Spring Cloud Nacos Service Discovery --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency></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服务注册表工件
<dependencyManagement> <dependencies> <!-- Spring Cloud Alibaba dependencies --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.9.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>服务代码实施
Java代码:
@org.apache.dubbo.config.annotation.Serviceclass EchoServiceImpl implements EchoService { @Override public String echo(String message) { return "[echo] Hello, " + message; }}@ org.apache.dubbo.config.annotation.Service注释将其声明为Dubbo服务。
配置Dubbo服务
@DubboComponentScanannotation。
Dubbo和Spring Cloud。
dubbo: scan: base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap protocol: name: dubbo # -1 means self-defined port: -1 registry: address: spring-cloud://localhostspring: application: name: spring-cloud-alibaba-dubbo-server main: allow-bean-definition-overriding: true cloud: nacos: # Nacos discovery: server-addr: 127.0.0.1:8848Spring Boot应用程序类
Spring Boot应用程序类相同:
@EnableDiscoveryClient@EnableAutoConfigurationpublic class DubboSpringCloudServerBootstrap { public static void main(String[] args) { SpringApplication.run(DubboSpringCloudServerBootstrap.class); }}Nacos服务,以便Nacos可以发现该服务。
实施Dubbo客户
创建spring-cloud-dubbo-client-sample Maven项目
<dependencyManagement> <dependencies> <!-- Spring Cloud Alibaba dependencies --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.9.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement><dependencies> <!-- Sample API --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dubbo-sample-api</artifactId> <version>${project.version}</version> </dependency> <!-- Spring Boot dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <!-- Dubbo Spring Cloud Starter --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!-- Spring Cloud Nacos Service Discovery --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency></dependencies>spring-boot-starter-web的Web Servlet应用程序。
配置客户端
Dubbo和Spring。
dubbo: registry: address: spring-cloud://localhost cloud: subscribed-services: spring-cloud-alibaba-dubbo-serverspring: application: # Dubbo name: spring-cloud-alibaba-dubbo-client main: # Spring Boot 2.1 allow-bean-definition-overriding: true cloud: nacos: # Nacos discovery: server-addr: 127.0.0.1:8848dubbo.cloud.subscribed-services绑定到spring-cloud-dubbo-server-sample来指定要使用的服务。
· dubbo.cloud.subscribed-services:要订阅多个服务,请使用“,”作为分隔符。
Web应用程序,因此默认端口为8080。 可以通过修改server.port属性来更改。
Spring Boot应用程序类和实现Java代码
@EnableDiscoveryClient@EnableAutoConfiguration@RestControllerpublic class DubboSpringCloudClientBootstrap { @Reference private EchoService echoService; @GetMapping("/echo") public String echo(String message) { return echoService.echo(message); } public static void main(String[] args) { SpringApplication.run(DubboSpringCloudClientBootstrap.class); }}Web客户端,因此我们可以使用curl进行尝试。 如果我们跑
curl http://127.0.0.1:8080/echo?message=yourmessageJava客户端来获得相同的结果。
We should see the result [echo] Hello, yourmessage结论
Spring Cloud阿里巴巴现在有两个发行版,其中包括Dubbo。 它们是与Spring Cloud Finchley兼容的0.2.2版本和与Spring Cloud Greenwich兼容的0.9.0版本。 无论