乐趣区

关于后端:Dubbo-3-端口协议复用

个性阐明

通过对 protocol 进行配置,dubbo3 能够反对端口的协定复用。
比方应用 Triple 协定启动端口复用后,能够在雷同的端口上为服务减少
Dubbo 协定反对,以及 Qos 协定反对。这些协定的辨认都是由一个对立的端口复用
服务器进行解决的,能够用于服务的协定迁徙,并且能够节约端口以及相干的资源,缩小运维的复杂性。

  • 在服务的创立阶段,通过从 Config 层获取到服务导出的协定配置从而创立不同的 Protocol 对象进行导出。在导出的过程
    中,如果不是第一次创立端口复用的 Server,那么 Exchanger 会将 Protcol 层传递的数据保留到 Server,用于后续解决该协定类型的音讯。
  • 当客户端的消息传递过去后,首先会通过 Server 传递给 ProtocolDetector,如果实现了辨认,那么就会标记该客户端为对应的协定。并通过 WireProtocol 配置对应的解决逻辑,最初交给 ChannelOperator 实现底层的 IO 框架和对应的 Dubbo 框架的解决逻辑的绑定。
  • 以上的协定辨认实现之后,Channel 曾经确定了如何解决近程的客户端音讯,通过对应的 ServerPipeline 进行解决即可(在解决的过程中也会依据配置信息决定音讯的解决线程)。

应用形式

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

参考用例

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 指令实现辨认

  2. 发送 telnet 命令辨认

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

    1. 应用 crtl + “]” 进入到 telnet 交互界面(telnet 默认的 escape character)
    2. 调用 “send ayt” 向服务端发送非凡识别字段(为 telnet 协定的一个非凡字段)
    3. 回车实现音讯发送并进入到 dubbo 的交互界面

服务援用

以 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);

欢送在 https://github.com/apache/dubbo 给 Dubbo Star。
搜寻关注官网微信公众号:Apache Dubbo,理解更多业界最新动静,把握大厂面试必备 Dubbo 技能

退出移动版