发布时间:2023-01-05 文章分类:编程知识 投稿人:赵颖 字号: 默认 | | 超大 打印

特性说明

通过对protocol进行配置,dubbo3可以支持端口的协议复用。
比如使用Triple协议启动端口复用后,可以在相同的端口上为服务增加
Dubbo协议支持,以及Qos协议支持。这些协议的识别都是由一个统一的端口复用
服务器进行处理的,可以用于服务的协议迁移,并且可以节约端口以及相关的资源,减少运维的复杂性。

Dubbo 3 端口协议复用

使用方式

在同一主机上部署多个服务或需要通过负载均衡器访问多个服务。

参考用例

https://github.com/apache/dubbo-samples/tree/master/dubbo-samples-port-unification

配置方式

关于Dubbo支持的配置方式,可以参考配置说明

服务多协议导出

ext-protocol参数支持配置多个不同的协议,协议之间通过","进行分隔。

xml 配置

<dubbo:protocol name="dubbo" port="-1" ext-protocol="tri,"/>
<bean id="greetingService" class="org.apache.dubbo.demo.provider.GreetingServiceImpl"/>
<dubbo:service delay="5000" version="1.0.0" group="greeting" timeout="5000" interface="org.apache.dubbo.demo.GreetingService" ref="greetingService" protocol="dubbo"/>

API 配置

ProtocolConfig config = new ProtocolConfig(CommonConstants.TRIPLE, -1);
config.setExtProtocol(CommonConstants.DUBBO+",");

yaml 配置

dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: tri
    port: -1
    ext-protocol: dubbo,

properties 配置

dubbo.protocol.name=tri
dubbo.protocol.ext-protocol=dubbo,
dubbo.protocol.port=20880

Qos接入

Qos模块导入

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-qos</artifactId>
</dependency>

完成Qos模块的导入之后,相关的配置项可参考Qos操作手册进行配置。

默认情况下,基于端口复用的Qos服务在模块导入后是启动的。

使用方式

Qos使用

将Qos协议接入到端口复用的场景下,需要在建立连接之后,客户端先向服务端发送消息,对比将Qos协议通过单个端口提供服务,端口复用版的Qos协议在处理telnet连接的情况下需要用户执行一些操作,完成协议识别(二选一)。

  1. 直接调用命令

    直接调用telnet支持的命令也可以完成识别,在用户不熟悉的情况下可以调用help指令完成识别

    Dubbo 3 端口协议复用

  2. 发送telnet命令识别

    通过telnet命令建立连接之后,执行以下几个步骤:

    1. 使用 crtl + "]" 进入到telnet交互界面(telnet默认的escape character)
    2. 调用 "send ayt" 向服务端发送特殊识别字段(为telnet协议的一个特殊字段)
    3. 回车完成消息发送并进入到dubbo的交互界面

    Dubbo 3 端口协议复用

服务引用

以dubbo-samples-port-unification中的例子作为基础, 引用不同协议的服务和非端口复用情况下的配置是一致的,下面通过Consumer端的InvokerListener输出调用过程中的URL信息。

ReferenceConfig<GreetingService> reference = new ReferenceConfig<>();
reference.setInterface(GreetingService.class);
reference.setListener("consumer");
reference.setProtocol(this.protocol);
// reference.setProtocol(CommonConstants.DUBBO);
// reference.setProtocol(CommonConstants.TRIPLE);

Dubbo 3 端口协议复用

欢迎在 https://github.com/apache/dubbo 给 Dubbo Star。
搜索关注官方微信公众号:Apache Dubbo,了解更多业界最新动态,掌握大厂面试必备 Dubbo 技能