• dubbo中的group与version的存在意义


      公司每周五都要给线上系统发布一个版本,我将本周新开发的业务模块直接提交到svn的主干上(当然本机已经测试通过),在公司的测试环境部署运行正常,测试人员业务测试通过。但是在部署到准生产环境上后出现了意想不到的现象。主服务(web服务消费端)展示的业务界面,一会儿正确一会儿不正确。经排查svn分支代码合并正确,排除部署版本差异问题。最终我在本机部署了一个dubbo-admin主服务,连接上准生产的zookeeper服务集群,发现服务提供者服务集群,提供接口相同,但是接口的实现不一样。握草,瞬间被坑爹的队友无语。原来是其他部门的同事,新拉出来一个开发分支,在原来的项目上拓展模块,没做任何调整就直接部署dubbo服务,导致服务提供者提供的接口名一样,所导致的原因。好了问题确定了,也就有了解决方案。

    解决方案:

    group:当一个接口有多种实现时,可以用group区分;

     1     <!-- start--服务提供者   -->
     2     <!-- dubbo中当一个接口有多个实现类时,需要添加group来区分 -->
     3     <!-- 机器A:服务提供者 -->
     4     <bean id="zhenliangsongA" class="com.xxx.ServiceImplA" />
     5     <dubbo:service group="song" interface="com.xxx.InterfaceService" ref="zhenliangsongA" />
     6     <!-- 机器B:服务提供者 -->
     7     <bean id="zhenliangsongB" class="com.xxx.ServiceImplB" />
     8     <dubbo:service group="wang" interface="com.xxx.InterfaceService" ref="zhenliangsongB" />
     9     <!-- end--服务提供者   -->
    10     
    11     <!-- start--服务消费者   -->
    12     <!-- 机器C:服务消费者:dubbo消费者也可以设置为“*”,表示消费任意一个group的服务均可   -->
    13     <dubbo:reference id="consumerService" interface="com.xxx.InterfaceService" group="*" />
    14     <!-- 机器D:服务消费者:dubbo消费者也可以设置为“song”,表示只能消费group是song的接口实现类   -->
    15     <dubbo:reference id="consumerService" interface="com.xxx.InterfaceService" group="song" />
    16     <!-- 机器E:服务消费者:dubbo消费者也可以设置为“wang”,表示只能消费group是wang的接口实现类   -->
    17     <dubbo:reference id="consumerService" interface="com.xxx.InterfaceService" group="wang" />
    18     <!-- end--服务消费者   -->

    附加:顺便将version的使用也一并说一下;

    version:当一个接口的实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用;

     1     <!-- start--服务提供者   -->
     2     <!-- 机器A提供1.0.0版本服务 -->
     3     <dubbo:service interface="com.xxx.ProviderService" version="1.0.0" />
     4     <!-- 机器B提供2.0.0版本服务 -->
     5     <dubbo:service interface="com.xxx.ProviderService" version="2.0.0" />
     6     <!-- end--服务提供者   -->
     7     
     8     <!-- start--服务消费者   -->
     9     <!-- 机器C消费1.0.0版本服务 -->
    10     <dubbo:reference id="consumerService" interface="com.xxx.ProviderService" version="1.0.0" />
    11     <!-- 机器D消费2.0.0版本服务 -->
    12     <dubbo:reference id="consumerService" interface="com.xxx.ProviderService" version="2.0.0" />
    13     <!-- 消费任意一个版本服务 -->
    14     <dubbo:reference id="consumerService" interface="com.xxx.ProviderService" version="*" />
    15     <!-- end--服务消费者   -->

    接口升级时注意事项:
    * 在低压力时间段,先升级一半的提供者为新版本; 
    * 再将所有的消费者升级为新版本; 
    * 然后将剩下的一半提供者升级为新版本;

  • 相关阅读:
    洛谷1001 A+B Problem
    怒刷洛谷记录
    前端开发工程师---技术路线图
    HTML5、微信、APP:创业寒冬只能选其一,该选哪个?
    eafier 簡單易用 HTML、CSS 網頁編輯器(可自動插入 Tag 標籤)
    <c ss高效开发实战>看完了,Bootstrap学习是关键
    【原创】CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(5)使用放射渐变制作光影效果
    CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(4)构造尺寸更灵活的背景
    CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(3)线性渐变
    CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(2)CSS3利用图层叠加实现多背景
  • 原文地址:https://www.cnblogs.com/aoshicangqiong/p/8638424.html
Copyright © 2020-2023  润新知