通过优锐课核心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中。。
12 3 4 5 6 7 14 15 16 17org.springframework.cloud 8 9spring-cloud-dubbo-sample-api 10 11${project.version} 12 1318 19 24 25 26 27org.springframework.boot 20 21spring-boot-actuator 22 2328 29 34 35 36 37org.springframework.cloud 30 31spring-cloud-starter-dubbo 32 3338 39 44 45org.springframework.cloud 40 41spring-cloud-starter-alibaba-nacos-discovery 42 43
在上面的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服务注册表工件
在继续之前,我们需要在定义中添加一个版本:
12 3 4 5 6 7 22 238 9 20 21org.springframework.cloud 10 11spring-cloud-alibaba-dependencies 12 130.9.0.RELEASE 14 15pom 16 17import 18 19
服务代码实施
这是实现的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项目
与服务端配置类似,我们需要指定依赖项:
12 3 24 254 5 6 7 22 238 9 20 21org.springframework.cloud 10 11spring-cloud-alibaba-dependencies 12 130.9.0.RELEASE 14 15pom 16 17import 18 1926 27 28 29 78 7930 31 38 39 40 41org.springframework.cloud 32 33spring-cloud-dubbo-sample-api 34 35${project.version} 36 3742 43 48 49org.springframework.boot 44 45spring-boot-starter-web 46 4750 51 56 57 58 59org.springframework.boot 52 53spring-boot-actuator 54 5560 61 66 67 68 69org.springframework.cloud 62 63spring-cloud-starter-dubbo 64 6570 71 76 77org.springframework.cloud 72 73spring-cloud-starter-alibaba-nacos-discovery 74 75
与服务端的主要区别在于客户端将是一个使用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用户,还是相反,经验都应该是无缝的。
> 喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
> 如果你对java技术很感兴趣也可以交流学习,共同学习进步。
> 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货