dubbo之多协议,多注册中心(四)

dubbo支持很多协议

dubbo支持的协议有默认的dubbo://、rmi://、hessian://、http://、webservice://、thrift://、memcached://、redis://、rest://。主要以dubbo为主,其他的就说一些不一样的地方,太多就不一一写出来,还是以官网为准dubbo官网

1、duubo://

(1)优点: 单一长连接NIO异步通讯,适合小数据大并发的服务调用,以及消费者机器大于服务提供者机器数的情况

(2)缺点: 不适合大数据量的服务,比如传文件视频等,除非请求量很低

(3)约束:因为hessian 会做特殊的处理,所以如果是对象请实现Serializable的接口,或者转成json字符串或者它本身就是字符串,传入传出的数据大小建议小于100K

(4)对于客户端和服务端的接口的参数有一定的容错性

在这里插入图片描述

服务器端客户端对领域对象并不需要完全一致,而是按照最大匹配原则

(5)配置协议:

<dubbo:protocol name="dubbo" port="20880" />

多端口

<dubbo:protocol id="dubbo1" name="dubbo" port="20880" />
<dubbo:protocol id="dubbo2" name="dubbo" port="20881" />

多连接设置是当数据量较大时,提高速率,默认0

//服务端
<dubbo:service connections="1"/>
//客户端
<dubbo:reference connections="1"/>

表示该服务使用独立长连接

防止服务端被撑挂,可以限制最大连接数

<dubbo:protocol name="dubbo" accepts="1000" />
(2)rmi://

采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接JDK 标准序列化方式
服务端和客户端要求编程语言都是java

特性

  1. 连接个数:多连接
  2. 连接方式:短连接
  3. 传输协议:TCP
  4. 传输方式:同步传输
  5. 序列化:Java 标准二进制序列化
  6. 适用范围:传入传出参数数据包大小混合,消费者提供者个数差不多,可传文件
  7. 适用场景:常规远程服务方法调用,与原生RMI服务互操作
(3)hessian://

Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现

特性

  1. 连接个数:多连接
  2. 连接方式:短连接
  3. 传输协议:HTTP
  4. 传输方式:同步传输
  5. 序列化:Hessian二进制序列化
  6. 适用范围:传入传出参数数据包较大,提供者消费者个数提供者压力较大可传文件
  7. 适用场景:页面传输文件传输,或与原生hessian服务互操作
(4)http://

HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现

特性

  1. 连接个数:多连接
  2. 连接方式:短连接
  3. 传输协议:HTTP
  4. 传输方式:同步传输
  5. 序列化:表单序列化
  6. 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件
  7. 适用场景:需同时给应用程序和浏览器 JS 使用的服务
(5)webservice://

基于 WebService 的远程调用协议,可以和原生 WebService 服务互操作,一方用dubbo的WebService协议,一方直接用WebService

特性

  1. 连接个数:多连接
  2. 连接方式:短连接
  3. 传输协议:HTTP
  4. 传输方式:同步传输
  5. 序列化:SOAP 文本序列化
  6. 适用场景:系统集成,跨语言调用

主要是上面这5种,下面了解

(6)thrift://

当前 dubbo 支持 的 thrift 协议是对 thrift 原生协议 [2] 的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。

(7)memcached://

基于 memcached实现的 RPC 协议
Memcached 是一个高效的 KV 缓存服务器

(8)redis://

基于 Redis实现的 RPC 协议
Redis是一个高效的 KV 缓存服务器

(9)rest://

基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持

用于实现REST风格比较简单,用注解用的多

(10)多个协议暴露服务

不同服务不同协议

 <!-- 多协议配置 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:protocol name="rmi" port="1099" />
    <!-- 使用dubbo协议暴露服务 -->
    <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
    <!-- 使用rmi协议暴露服务 -->
    <dubbo:service interface="com.alibaba.hello.api.DemoService" ref="demoService" protocol="rmi" /> 

多协议暴露服务

<!-- 多协议配置 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:protocol name="hessian" port="8080" />
    <!-- 使用多个协议暴露服务 -->
    <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService"  protocol="dubbo,hessian" />

2、多注册中心

dubbo也支持多种注册中心,zookeeper、Multicast、Nacos、Redis、Simple

(1)zookeeper

这个可用于生产环境,并推荐使用

在这里插入图片描述
Dubbo 支持 zkclient 和 curator 两种 Zookeeper 客户端实现:
我这用的是curator,因为2.7.x版本已经删除zkclient
别忘了jar包

直接zookeeper集群配置

<dubbo:registry address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181" />

同一个zookeeper分为多组

<dubbo:registry id="chinaRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="china" />
<dubbo:registry id="intlRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="intl" />
(2)Multicast 注册中心
<dubbo:registry address="multicast://224.5.6.7:1234?unicast=false" />

为了减少广播量,Dubbo 缺省使用单播发送提供者地址信息给消费者,如果一个机器上同时启了多个消费者进程,消费者需声明 unicast=false,否则只会有一个消费者能收到消息;当服务者和消费者运行在同一台机器上,消费者同样需要声明unicast=false,否则消费者无法收到消息,导致No provider available for the service异常:

(3)Nacos 注册中心

详细的请去Nacos 注册中心

<dubbo:registry address="nacos://10.20.153.10:8848" />
(4)Redis 注册中心
<dubbo:registry address="redis://10.20.153.10:6379?backup=10.20.153.11:6379,10.20.153.12:6379" />
(5)Simple 注册中心

Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致

<dubbo:registry address="127.0.0.1:9090" />

警告:此 SimpleRegistryService 只是简单实现不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境

(5)多注册中心一起应用

下面用的注册中心是Simple 注册中心,如果是zookeeepr那address里的前端加上zookeeepr://

多注册中心注册同一个服务

 <!-- 多注册中心配置 -->
    <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" />
    <dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false" />
    <!-- 向多个注册中心注册 -->
    <dubbo:service interface="com.alibaba.hello.api.HelloService" ref="helloService" registry="hangzhouRegistry,qingdaoRegistry" />

不同服务不同注册中心

 <!-- 多注册中心配置 -->
    <dubbo:registry id="chinaRegistry" address="10.20.141.150:9090" />
    <dubbo:registry id="intlRegistry" address="10.20.154.177:9010" default="false" />
    <!-- 向中文站注册中心注册 -->
    <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="chinaRegistry" />
    <!-- 向国际站注册中心注册 -->
    <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" registry="intlRegistry" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值