SpringBoot中使用dubbo实现RPC调用

Dubbo(来自于阿里巴巴)Dubbo是一个分布式服务框架,致力于提供高性能和透明化的PRC远程调用服务调用方案 。

SpringBoot中使用dubbo实现RPC调用

文章插图
 
Dubbo的的特点
  • 通过spring配置的方式即可完成服务化,对于应用无入侵 。(SpringCloud有一定的入侵)
  • 通过maven的install &deploy命令把interface和Model层发布到仓库中,服务调用方只需要依赖interface和model层即可 。
  • 通过zookeeper设置达到注册服务和心跳检测,通过gateWay前置网关(Clound使用Zuul实现负载均衡将请求转向Eureka服务器)隔绝外部直接调用原子服务的风险
SpringBoot中使用Dubbo引入依赖<!--dubbo依赖--><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.6</version></dependency><dependency><groupId>org.Apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.0.1</version><exclusions><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.7</version></dependency>dubbo常用配置及注意事项1、启动时检查缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true 。关闭所有服务的启动时检查:(没有提供者时报错)<dubbo:consumer check="false" />关闭某个服务的启动时检查:(没有提供者时报错)<dubbo:reference interface="com.foo.BarService" check="false" />其它的启动时检查还包括:注册中心2、直连提供者在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表 。<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />3、服务分组当一个接口有多种实现时,可以用group区分 。provider:<dubbo:service group="feedback" interface="com.xxx.IndexService" ref="indexServiceFeedback" /><dubbo:service group="member" interface="com.xxx.IndexService"ref="indexServiceMember" />cosumer:<dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" /><dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />4、多版本当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用 。一般处理步骤1)在低压力时间段,先升级一半提供者为新版本2)再将所有消费者升级为新版本3)然后将剩下的一半提供者升级为新版本<dubbo:service interface="com.foo.BarService" version="1.0.0" /><dubbo:service interface="com.foo.BarService" version="2.0.0" />5、异步调用可完成并行调用多个远程服务 。异步总是不等待返回 。<dubbo:reference id="fooService" interface="com.alibaba.foo.FooService"><dubbo:method name="findFoo" async="true" /></dubbo:reference>6、延迟暴露如果你的服务需要Warmup时间,比如初始化缓存,等待相关资源就位等,可以使用delay进行延迟暴露 。<dubbo:provider delay="-1" />当然,也可以配置到服务级别,但有些需要地方需要注意 。7、dubbo:protocol属性threadpool:线程池类型,可选:fixed/cached ,默认fixed。threads :服务线程池大小(固定大小) ,默认为100payload:请求及响应数据包大小限制,单位:字节,默认为88388608(=8M)如:<dubbo:protocol name="dubbo" port="27001" threadpool="cached" threads="20"/>ThreadPoolfixed 固定大小线程池,启动时建立线程,不关闭,一直持有 。(缺省)cached 缓存线程池,空闲一分钟自动删除,需要时重建 。limited可伸缩线程池,但池中的线程数只会增长不会收缩 。(为避免收缩时突然来了大流量引起的性能问题) 。8、dubbo:Application<dubbo:application name="xxx_service" />name必填 。当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样dubbo生产者配置dubbo-provider.xml :通过配置xml的方式来配置dubbo服务的提供者


推荐阅读