SpringBoot2整合Dubbo框架,实现RPC服务远程调用
一、Dubbo框架简介
1、框架依赖
图例说明:
1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互。
2)图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点。
3)图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。
4)图中只包含 RPC 的层,不包含 Remoting 的层,Remoting 整体都隐含在 Protocol 中。
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了天水免费建站欢迎大家使用!
2、核心角色说明
1)Provider 暴露服务的服务提供方
2)Consumer 调用远程服务的服务消费方(负载均衡)
3)Registry 服务注册与发现的注册中心(监控、心跳、踢出、重入)
4)Monitor 服务消费者和提供者在内存中累计调用次数和调用时间,主动定时每分钟发送一次统计数据到监控中心。
5)Container 服务运行容器:远程调用、序列化
二、与SpringBoot2.0整合
1、核心依赖
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
2、项目结构说明
结构说明
dubbo-consume:服务消费方
dubbo-provider:服务提供方
dubbo-common:公共代码块,Dubbo接口,实体类
3、核心配置
1)提供方配置
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
port: 7007
connection-timeout: 5000ms
spring:
application:
name: block-dubbo-provider
# Dubbo 配置文件
dubbo:
application:
name: block-dubbo-provider
registry:
address: 127.0.0.1:2181
protocol: zookeeper
protocol:
name: dubbo
port: 20880
scan:
base-packages: com.boot.consume
2)消费方配置
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
port: 7008
connection-timeout: 5000ms
spring:
application:
name: block-dubbo-consume
# Dubbo 配置文件
dubbo:
application:
name: block-dubbo-consume
registry:
address: 127.0.0.1:2181
protocol: zookeeper
三、演示案例
1、服务远程调用
1)提供方服务接口
- 注意这里的注解
- com.alibaba.dubbo.config.annotation.Service
@Service @Component public class DubboServiceImpl implements DubboService { private static Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ; @Override public String getInfo(String param) { LOGGER.info("字符参数:{}",param); return "[Hello,Cicada]"; } @Override public UserEntity getUserInfo(UserEntity userEntity) { LOGGER.info("实体类参数:{}",userEntity); return userEntity; } }
2)消费方接口
- 注意这里注解
- com.alibaba.dubbo.config.annotation.Reference
- org.springframework.stereotype.Service
@Service public class ConsumeService implements DubboService { @Reference private DubboService dubboService ; @Override public String getInfo(String param) { return dubboService.getInfo(param); } @Override public UserEntity getUserInfo(UserEntity userEntity) { return dubboService.getUserInfo(userEntity); } }
2、接口超时配置
该配置可以在服务提供方配置,也可以在服务消费方配置,这里演示在提供方的配置。
注解:timeout
1)服务接口注解@Service(timeout = 2000) @Component public class DubboServiceImpl implements DubboService { }
2)消费方调用
@Override public String timeOut(Integer time) { return dubboService.timeOut(time); }
3)测试接口
服务超时抛出异常com.alibaba.dubbo.remoting.TimeoutException
3、接口多版本配置
1)服务提供方
相同接口提供两个版本实现。注解:version。
版本一:@Service(version = "1.0.0") @Component public class VersionOneImpl implements VersionService { @Override public String getVersion() { return "{当前版本:1.0.0}"; } }
版本二:
@Service(version = "2.0.0") @Component public class VersionTwoImpl implements VersionService { @Override public String getVersion() { return "{当前版本:2.0.0}"; } }
2)消费方调用
通过@Reference(version)注解,将指向不同版本的接口实现。@Service public class VersionServiceImpl implements VersionService { @Reference(version = "1.0.0") private VersionService versionService1 ; @Reference(version = "2.0.0") private VersionService versionService2 ; @Override public String getVersion() { return versionService1.getVersion(); } public String version2 (){ return versionService2.getVersion() ; } }
以上案例都是参照Dubbo官网的流程编写的,Dubbo许多强大功能都可以参考官网一步步的配置。
四、源代码地址
GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 码云地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent
新闻标题:SpringBoot2整合Dubbo框架,实现RPC服务远程调用
文章链接:http://scyanting.com/article/ihpjpc.html