zk

zk支持K-V存储
显示所有K:

ls /

获取对应K的V:

get /xx

provider

<!--应用名称-->
<dubbo:application name />

<!--注册中心-->
<dubbo:registry address 
				protocl />

<!--协议-->
<dubbo:protcol name 
			   port />

<!--服务接口-->
<dubbo:service ref 
			   interface
			   version
			   group
			   timeout
			   loadbalance
			   retries
			   weight />

<!--为dubbo:service的通用配置,但局部优先-->
<dubbo:provider group version/>

<!--服务接口实现类路径-->
<context:component-scan base-package />

应用名称与接口一致自动形成集群

zk发布的是对应服务接口的url地址

dubbo://192.168.53.22:8801/cn.khue.service.TestService?anyhost=true
&application=应用名称
&dubbo=dubbo版本
&generic=
&interface=
&methods=
&pid=
&side=
&timestamp=
&group=组名
&version=版本号

字符含义:
%3A :
%2F /
%3F ?
%3D =
%26 &
%2C ,

Dubbo开发的时候,如果有相同接口,多个不同实现的服务同时需要发布的时候,如何处理?

在Dubbo中接口类并不能唯一确定一个服务,在Dubbo中接口+服务分组+版本号才能唯一确定一个服务
所以,当一个接口有多种实现时,可以使用group分组区分

服务提供方:

<!--服务实现一-->
<dubbo:service interface="cn.khue.service.TestService" ref="testService" group="group01"/>

<!--服务实现二-->
<dubbo:service interface="cn.khue.service.TestService" ref="testService" group="group02"/>

服务消费方:

<!--服务实现一-->
<dubbo:reference interface="cn.khue.service.TestService" id="testService" group="group01"/>

<!--服务实现二-->
<dubbo:reference interface="cn.khue.service.TestService" id="testService" group="group02"/>

<!--任意组可使用 group="*"-->

版本号可用于版本迁移,解决同一服务分组的接口实现出现不兼容升级的问题
具体步骤:

  1. 在低压力时间段,先升级一半提供者
  2. 再将所有消费者升级
  3. 再将剩余的一半提供者升级

如果有多个同名服务,需要同时发布的时候,如何处理?

使用分组或版本号
使用不同协议或多注册中心也可以,但是这样会加大客户端压力

如果请求参数或响应结果,数据容量过大(超过8M),如何处理?

异步NIO长连接

Dubbo传输数据大小默认为8M,超限则会抛出异常
大数据的传输并不符合Dubbo设计的初衷,Dubbo的长连接主要用于小数据包频繁调用,对于大数据的传输可以考虑通过其他方式实现

  1. 配置payload属性
<dubbo:protocol name="dubbo" port="-1" payload = "8388608"/>
<dubbo:protocol name="dubbo" port="20880" payload="8388608"/>
  1. 分组聚合 - 按组合并返回结果
<!--搜索所有分组-->
<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true" />

<!--合并所有分组-->
<dubbo:reference interface="com.xxx.MenuService" group="aaa,bbb" merger="true" />

<!--合并指定分组-->
<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true">
    <dubbo:method name="getMenuItems" merger="false" />
</dubbo:reference>
  1. 配置payload(默认为字节)-不推荐
  2. 通过数据流转平台(为了传数据)转移 - FTP、FastDFS、Redis、MongoDB、DB、代码实现

参考

1.Dubbo剖析-服务分组与服务版本号 2.dubbo:9个你不一定知道,但好用的功能 3.dubbo 面试18问(含答案) 4.Dubbo相关知识总结 5.Dubbo开发优化注意事项