当前位置: 首页 > news >正文

SpringBoot工程中Dubbo多协议使用方式

在升级Dubbo3的过程中,同时升级了Triple协议,因为原来的dubbo协议的接口其他服务还在使用,且暂时无法升级,因此部分旧的dubbo协议的服务需要做兼容。

兼容的方式有两种,一种比较笨的方式是将需要兼容的dubbo协议服务独立出来一个服务单独部署;另一种是在同一个服务中去做兼容,这种情况就需要使用双协议注册的方式,官方文档中也提供了相关的文档,但是稳定时使用的xml的配置方式,我们项目是springboot工程,因此配置稍有不同。

官方多协议配置介绍

一、dubbo官网关于多协议配置介绍如下

1、不同服务不同协议

不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> 
    <dubbo:application name="world"  />
    <dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" />
    <!-- 多协议配置 -->
    <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" version="1.0.0" ref="demoService" protocol="rmi" /> 
</beans>

2、多协议暴露服务

需要与 http 客户端相互操作

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <dubbo:application name="world"  />
    <dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" />
    <!-- 多协议配置 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:protocol name="hessian" port="8080" />
    <!-- 使用多个协议暴露服务 -->
    <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" />
</beans>

二、springboot工程中使用dubbo多协议

要使多协议使用生效,需要在springboot工程启动配置加上注解@EnableDubboConfig

@EnableDubboConfig
@SpringBootApplication
@DubboComponentScan("com.my.test.provider")
public class MyServApp {
    public static void main(String[] args) {
        SpringApplication.run(MyServApp.class, args);
    }
}

多协议配置如下

启用多协议,为每个协议开启了一个独立的端口,其实相当于是两个不同的服务了

dubbo:
  application:
    #provider注册模式,可选值 interface(接口级)、instance(应用级)、all,默认是all(双注册)
    register-mode: all
    metadata-service-port: 20982
#    metadata-service-protocol: tri
  registry:
    address: nacos://127.0.0.1:8848?namespace=my_local
  protocols:
  	# 此为多协议的key,在@DubboService注解中指定时指定此key值
    tri:
      name: tri
      port: -1
    dubbo:
      name: dubbo
      port: -1

1、不同服务不同协议

服务A和服务B分别使用了不同的协议,通过@DubboServiceprotocol属性指定,属性值对应配置文件中多协议的key值

如服务A使用tri协议

@DubboService(protocol = "tri")
public class AServiceImpl implements AServiceApi {

}

如服务B使用dubbo协议

@DubboService(protocol = "dubbo")
public class BServiceImpl implements BServiceApi {

}

2、多协议暴露服务

同一个服务同时注册为两种协议的服务,同样是使用注解@DubboService指定,protocol属性值配置多协议,使用英文逗号分隔

@DubboService(protocol = "dubbo,tri")
public class CServiceImpl implements CServiceApi {

}

相关文章:

  • 阿里首次开源 Java 10万字八股文,Github仅一天星标就超60K
  • 凯文凯利10条人生建议,送给迷茫的你!(上)
  • The DAO事件始末
  • 工业智能网关BL110应用之六: 支持PLC,Modbus,BACnet,电表等协议列表
  • Jackson公司蛋白质印迹指南丨样品制备
  • 数字IC必学之《Skill入门教程》
  • Operator 基础原理和概念
  • Math对象常用的方法
  • MySQL高级篇——锁
  • 【编程题】【Scratch二级】2022.06 画正方形
  • 【学习笔记】内存的连续分配管理方式
  • 图解 cv2.HoughLines cv2.line 参数原理
  • 使用简易网络实现二分类
  • XAML笔记
  • 5个自动化小技巧:聪明的员工和管理者如何提升效率?
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • CSS 三角实现
  • CSS魔法堂:Absolute Positioning就这个样
  • dva中组件的懒加载
  • IDEA 插件开发入门教程
  • Redis的resp协议
  • Spring-boot 启动时碰到的错误
  • STAR法则
  • 分享一份非常强势的Android面试题
  • 简单数学运算程序(不定期更新)
  • 前端知识点整理(待续)
  • 携程小程序初体验
  • 译自由幺半群
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 进程与线程(三)——进程/线程间通信
  • (16)Reactor的测试——响应式Spring的道法术器
  • (python)数据结构---字典
  • (二)hibernate配置管理
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计ssm电影分享网站
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三)mysql_MYSQL(三)
  • (实战篇)如何缓存数据
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)创业家杂志:UCWEB天使第一步
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .java 9 找不到符号_java找不到符号
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(一)
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .Net的C#语言取月份数值对应的MonthName值
  • .net反编译工具
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • ::前边啥也没有
  • @Data注解的作用
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹