关于后端: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 技能

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理