dubbo启动时抛出“qos-server can not bind localhost:22222”错误

在测试 dubbo 的粘滞连接时,再同一台服务器上面启动两个服务,抛出“qos-server can not bind localhost:22222”错误。

最近在学习Dubbo的粘滞连接时,在本地机器上面启动两个Dubbo服务(dubbo端口分别为20880或20881)。但是,启动时抛出了如下错误信息:

[02/06/19 09:36:35:035 CST] main ERROR server.Server:  [DUBBO] qos-server can not bind localhost:22222, dubbo version: 2.7.1, current host: 192.168.238.1

java.net.BindException: Address already in use: bind

at java.base/sun.nio.ch.Net.bind0(Native Method)

at java.base/sun.nio.ch.Net.bind(Net.java:461)

at java.base/sun.nio.ch.Net.bind(Net.java:453)

at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)

at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)

at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:558)

at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1358)

at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)

at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)

at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:1019)

at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:254)

at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:366)

at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)

at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:465)

at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)

at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)

at java.base/java.lang.Thread.run(Thread.java:834)

解决办法:

在正式解决问题之前,我们需要了解什么是QoS?以及怎样去关闭QoS等……

什么是QoS?

Qos=Quality of Service,qos是Dubbo的在线运维命令,可以对服务进行动态的配置、控制及查询,Dubboo2.5.8新版本重构了telnet(telnet是从Dubbo2.0.5开始支持的)模块,提供了新的telnet命令支持,新版本的telnet端口与dubbo协议的端口是不同的端口,默认为22222,可以通过配置文件dubbo.properties修改。telnet 模块现在同时支持 http 协议和 telnet 协议,方便各种情况的使用。

QoS提供了一些启动参数,来对启动进行配置,他们主要包括:

参数说明默认值
qosEnable是否启动QoStrue
qosPort启动QoS绑定的端口22222
qosAcceptForeignIp是否允许远程访问false

为了解决上面抛出的 “qos-server can not bind localhost:22222”错误,配置spring文件如下:

<dubbo:application name="demo-provider">
    <!-- 关闭qos -->
    <dubbo:parameter key="qos.enable" value="false"/>
    <dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
    <!-- 设置端口 -->
    <dubbo:parameter key="qos.port" value="33333"/>
</dubbo:application>

此时你可以去启动多个服务了。

我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。 —— 列宁
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号