7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用
概述
Apache Dubbo 是一款高性能的、基于Java的开源RPC框架,它提供了以下特性:
- 基于接口的远程方法调用
- 智能负载均衡
- 服务自动注册和发现
- 高可扩展性
- 运行期流量调度
- 可视化的服务治理
架构
(0)provider基于dubbo容器启动
(1)provider注册到注册中心(Nacos)
(2)consumer订阅注册中心的服务变化
(3)注册中心将服务变化结果异步地通知给consumer
(4)consumer直接调用provider接口
(5)monitor监控流量请求数据
Spring Cloud Alibaba 整合 Dubbo
创建主工程
创建一个空的工程,pom配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version></parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version><properties><project.version>1.0-SNAPSHOT</project.version><spring-cloud.version>Greenwich.SR6</spring-cloud.version><spring-cloud-alibaba.version>2.1.3.RELEASE</spring-cloud-alibaba.version></properties><modules><module>hello-dubbo-provider</module><module>hello-dubbo-consumer</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Dubbo --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!-- Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
</project>
创建provider子工程:hello-dubbo-provider
在alibaba-dubbo工程下,创建子工程,pom.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><artifactId>hello-dubbo-provider</artifactId><packaging>pom</packaging><modules><module>hello-dubbo-provider-api</module><module>hello-dubbo-provider-service</module></modules>
</project>
在hello-dubbo-provider工程下,创建hello-dubbo-provider子工程。目的是定义接口,后续consumer会引用该工程,然后就能直接调用provider借口了
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>hello-dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-provider-api</artifactId><packaging>jar</packaging></project>
创建接口类EchoService:
package com.train.dubbo.provider.api;public interface EchoService {String echo(String name);
}
这样api工程就完成了,很简单
在hello-dubbo-provider工程下,创建hello-dubbo-provider-service子工程。该工程是api工程的具体实现,因此必须依赖上一步创建的api工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>hello-dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-provider-service</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.train</groupId><artifactId>hello-dubbo-provider-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>
创建EchoServiceImpl实现EchoService接口
package com.train.dubbo.provider.service;import com.train.dubbo.provider.api.EchoService;
import org.apache.dubbo.config.annotation.Service;@Service(version = "1.0.0")
public class EchoServiceImpl implements EchoService {@Overridepublic String echo(String name) {return "Dubbo Hello:" + name;}
}
注意:@Service注解必须引用dubbo的Service,而不是spring,不要弄错了
创建Application启动类
@SpringBootApplication
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);}
}
配置application.yml,前提必须安装好nacos,还没安装的童鞋参考前面的文章
spring:application:name: dubbo-providermain:allow-bean-definition-overriding: truecloud:nacos:discovery:server-addr: 192.168.25.131:8848dubbo:scan:base-packages: com.train.dubbo.provider.serviceprotocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848
server:port: 8010
整个provider工程结构如下
启动provider-service,然后查看Nacos,确认服务是否注册
在主工程下创建hello-dubbo-consumer消费者工程,因为要消费provider接口,所以依赖provider-api工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-consumer</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.train</groupId><artifactId>hello-dubbo-provider-api</artifactId><version>${project.parent.version}</version></dependency></dependencies>
</project>
创建controller接口以便测试
@RestController
public class EchoController {@Reference(version = "1.0.0")private EchoService echoService;@GetMapping("/echo/{name}")public String echo(@PathVariable String name){return echoService.echo(name);}
}
创建启动类
@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);}
}
配置application.yml
server:port: 8020dubbo:protocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848scan:base-packages: com.train.dubbo.consumer.controllercloud:subscribed-services: dubbo-provider
spring:application:name: dubbo-consumercloud:nacos:discovery:server-addr: 192.168.25.131:8848main:allow-bean-definition-overriding: true
然后同样启动consumer工程,再确认Nacos
附上整个工程结构:
测试
在浏览器输入http://localhost:8020/echo/zhangsan,能正常输出provider-service实现的接口内容,就说明正常运行
7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用相关推荐
- 8.Spring Cloud Alibaba教程:整合Seata分布式事务
概述 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 更多的介绍可以参考官方文档:Seata快速入门 本篇主要是介绍Spring Cloud Alibaba ...
- 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
官网 https://sentinelguard.io/ 服务雪崩 微服务中各个服务之间通过http/rpc互相调用,假设其中1个服务因为网络或自身原因出现问题,调用这个服务就会出现线程堵塞,此时若有 ...
- Spring Cloud Alibaba教程:使用Nacos作为服务注册中心
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...
- 1.Spring Cloud Alibaba教程:简介
概述 2018年10月31日,SpringCloudAlibaba 正式入驻 SpringCloud 官方孵化器,并在 Maven 中央库发布第一个版本. Spring Cloud for Aliba ...
- Spring Cloud Alibaba 同时兼容dubbo与openfeign
一.前言 dubbo与springcloud都可以单独作为微服务治理框架在生产中进行使用,但使用过springcloud的同学大概了解到,springcloud生态的相关组件这些年已经逐步停更,这就导 ...
- 3.Spring Cloud Alibaba教程:Nacos服务注册与发现
概要 官网地址:Nacos官网和帮助文档 Nacos安装:Linux安装Nacos1.3.1(还没安装的先看这篇文章安装) Nacos主要作用:服务注册与发现.配置管理 本篇主要介绍的是服务注册与发现 ...
- 5.Spring Cloud Alibaba教程:Nacos整合Feign
概述 Feign是一个声明式的http客户端.使用Feign只需要创建接口并加上对应的注解,就可以实现类似RestTemplate方式的调用,只是它将底层的http请求代码隐藏起来.另外,Feign默 ...
- 4.Spring Cloud Alibaba教程:Nacos配置管理
概述 Nacos作为配置中心,跟传统的配置文件不同.它可以实现线上修改配置,实时生效,中间不需要重启任何应用. 知识点 Nacos通过Namespace.Group.DataID来做多环境配置,他们之 ...
- 回顾:oauth2和 spring cloud alibaba gateway 整合
一.oauth2认证中心:登录用户进行认证,生成token, 同时定义受保护的api服务 (一)oauth2的四种认证模式:授权码模式,简化模式,密码模式,客户端模式.其中授权码模式和密码模式用的最多 ...
最新文章
- Android模拟器环境下SD卡内容的管理[转]
- jcifs java_Java 使用JCIFS访问网络文件共享的工具类
- 使软件可二次开发_基于C++的?UG二次开发
- ForeignKey和ManyToManyField的限制关系
- pyppeteer:比 selenium 更高效的爬虫利器
- javascript提醒
- Flutter实战之自定义日志打印组件
- java环境安装菜鸟教程,Java基础教程---JDK的安装和环境变量的配置
- 字符集,字体,编码,代码页,输入法
- HealthKit Swift 教程: 开始
- c语言的sin cos是弧度,C++中cos,sin,asin,acos這些三角函數操作的是弧度,而非角度(轉)...
- 图新地球为什么很模糊,白球、看图、下载问题深度剖析
- 北京大学计算机学硕考研分数线,2020北京大学研究生分数线汇总(含2016-2020历年复试)...
- c语言中short作用,详解C语言中整数(short,int,long)
- idea中还原dont ask again
- Router中如何设置光标以全屏十字架显示
- 【MySQL】数据库表操作
- Quantopian单因子分析工具:Alphalens
- ConvertUtils
- python阿凡提与国王下棋_阿基米德与国王下棋的故事