本人开发机是Windows操作系统,程序依赖ActiveMQ服务,今天早上发现程序跑不起来,一番检查发现本机的ActiveMQ服务停止了,但启动不起来,查看ActiveMQ日志“wrapper.log”发现一下错误:
INFO | jvm 1 | 2021/10/13 09:47:35 | INFO | Apache ActiveMQ 5.15.9 (localhost, ID:DESKTOP-CUQU48I-54039-1634089655438-0:1) is starting
INFO | jvm 1 | 2021/10/13 09:47:35 | ERROR | Failed to start Apache ActiveMQ (localhost, ID:DESKTOP-CUQU48I-54039-1634089655438-0:1)
INFO | jvm 1 | 2021/10/13 09:47:35 | java.io.IOException: Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600 due to: java.net.BindException: Address already in use: JVM_Bind
就是说,“无法绑定本机的61616端口,因为这个端口已经被占用”
61616端口,是在ActiveMQ的配置文件“activemq.xml”中配置的,openwire这个就是配置的61616端口。
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
既然提示端口被占用,那就使用命令“netstat -ano | findstr 61616 ”来查看一下究竟是否有端口被占用。
C:\Users\yangyang>netstat -ano | findstr 61616
协议 本地地址 外部地址 状态 PID
TCP 192.168.6.200:53843 192.168.1.6:61616 ESTABLISHED 22036
TCP 192.168.6.200:53844 192.168.1.5:61616 ESTABLISHED 22036
可以看到,上面是我本机有一个程序访问了部两台机器的61616端口,本机并没有任何61616端口被占用,那为什么提示这个端口被占用呢(如果被占用可以根据PID去资源管理器里面查看是什么程序,或者使用 则使用 taskkill /f /pid 直接关闭该进程)?
经过一顿搜索,发现在Windows的服务中有个名为“Internet Connection Sharing (ICS)”的服务。
把这个服务,重新启动一下,就好了。重启完成之后,再次使用"netstat -ano | findstr 61616" 命令查看,可以看到ActiveMQ启动之后,61616端口被正常监听了。
C:\Users\yangyang>netstat -ano | findstr 61616
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:61616 0.0.0.0:0 LISTENING 22380
TCP [::]:61616 [::]:0 LISTENING 22380
22380就是ActiveMQ使用的java进程。
参考: