Apache ActiveMQ Artemis адрес уже используется - PullRequest
1 голос
/ 29 марта 2020

Вкл. Windows 10, Apache ActiveMQ Artemis 2.11.0 не запустится, потому что:

2020-03-28 23:03:04,322 INFO  [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address ExpiryQueue supporting [ANYCAST] 
2020-03-28 23:03:04,322 INFO  [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue ExpiryQueue on address ExpiryQueue 
2020-03-28 23:03:06,418 ERROR [org.apache.activemq.artemis.core.server] AMQ224000: Failure in initialisation: java.net.BindException: Address already in use: bind
        at sun.nio.ch.Net.bind0(Native Method) [rt.jar:1.8.0_212]
        at sun.nio.ch.Net.bind(Net.java:433) [rt.jar:1.8.0_212]
        at sun.nio.ch.Net.bind(Net.java:425) [rt.jar:1.8.0_212]
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) [rt.jar:1.8.0_212]
        at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:130) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:563) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1332) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:488) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:473) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:984) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:259) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:366) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:495) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905) [netty-all-4.1.34.Final.jar:4.1.34.Final]
        at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.11.0.jar:2.11.0]
2020-03-28 23:03:06,423 INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.11.0 [0.0.0.0, nodeID=61904c81-713a-11ea-ad5b-902b34592bce] 
2020-03-28 23:03:06,978 INFO  [org.apache.activemq.hawtio.branding.PluginContextListener] Initialized activemq-branding plugin

Я видел этот пост , как и некоторые другие. Проблема в том, что в сообщении об ошибке нет четкого упоминания о том, какой порт используется, только:

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

Я попробовал все предложенные решения, но тщетно. Также нет папки conf или activemq.xml.

ОБНОВЛЕНИЕ: под предыдущими утверждениями я имею в виду, что я уже проверил, и ни один из портов, используемых Артемисом, уже не используется какой-либо другой службой / приложением.

Все, что я смог найти, это файл broker.xml в папке etc брокера. Ни один из стандартных портов не используется. Также пытался отключить ICS (Inte rnet Connection Sharing) - без эффекта вообще.

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

ActiveMQ 5.x использует conf/activemq.xml, но ActiveMQ Artemis использует etc/broker.xml, так что то, что вы видите там, ожидается. В конечном счете проблема здесь, как указано в ответе, который вы цитировали , заключается в том, что либо уже запущен брокер, либо запущена какая-либо другая служба, использующая порт (ы), к которым ActiveMQ хочет привязаться.

ActiveMQ Artemis по умолчанию связывается с несколькими портами. Тезисы определены в etc/broker.xml. Вот конфигурация по умолчанию:

<acceptors>
   <acceptor name="artemis">tcp://0.0.0.0:61616??anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
   <acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
   <acceptor name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</acceptor>
   <acceptor name="hornetq">tcp://0.0.0.0:5445?protocols=HORNETQ,STOMP;useEpoll=true</acceptor>
   <acceptor name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true</acceptor>
</acceptors>

Итак, по умолчанию брокер связывается с этими портами:

  • 61616
  • 5672
  • 61613
  • 5445
  • 1883

Любой из этих портов может уже использоваться при запуске брокера. Вероятно, вам не нужен ваш брокер для прослушивания всех этих портов, поэтому я рекомендую отключить все, кроме того, что вам абсолютно необходимо. Если это решит вашу проблему, то отлично, но если нет, вы можете использовать процесс исключения, чтобы найти тот, который уже используется, или одну из команд из другого ответа (например, netstat, fuser, и др c.). После того, как вы определили проблемный порт c, вы можете либо изменить broker.xml на другой порт, либо остановить процесс, который уже использует его.

Если действительно верно, что ни один из портов не является использование этого означает, что есть ошибка в основной части сетевого стека JVM, потому что именно отсюда и происходит исключение. Я предполагаю, что такой ошибки нет, поэтому я рекомендую использовать процесс исключения, о котором я упоминал ранее. Попробуйте закомментировать все элементы acceptor и запустить брокера. Поскольку брокер не будет пытаться связываться с какими-либо портами, не должно быть никаких исключений. Затем остановите посредник и добавьте один из элементов acceptor обратно и перезапустите посредник. Делайте это для каждого acceptor до тех пор, пока проблема не появится снова, и в этот момент вы можете изменить конфигурацию брокера для использования другого порта.

1 голос
/ 02 апреля 2020

Я просто добавлю это на тот случай, если кто-то наткнется на этот пост, и решение выше не сработает;

Я столкнулся с этой проблемой при настройке второго брокера рядом с первым. Я получил ту же проблему, что Java выбрасывал java.net.BindException: Address already in use: bind.

Сконфигурированный порт-акцептор не использовался, но проблема была в том, что у каждого экземпляра посредника есть собственная консоль mgmt. Поэтому этой консоли также нужен порт. При настройке второго посредника ActiveMQ устанавливает консольный порт по умолчанию, который совпадает с консольным портом для первого посредника.

Вам также необходимо изменить консольный порт в bootstrap.xml на неиспользуемый порт.

Надеюсь, это поможет некоторым из вас:)

...