个性阐明
通过对 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 连贯的状况下须要用户执行一些操作,实现协定辨认(二选一)。
-
间接调用命令
间接调用 telnet 反对的命令也能够实现辨认,在用户不相熟的状况下能够调用 help 指令实现辨认
-
发送 telnet 命令辨认
通过 telnet 命令建设连贯之后,执行以下几个步骤:
- 应用 crtl + “]” 进入到 telnet 交互界面(telnet 默认的 escape character)
- 调用 “send ayt” 向服务端发送非凡识别字段(为 telnet 协定的一个非凡字段)
- 回车实现音讯发送并进入到 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 技能