Здесь есть пара проблем ...
Во-первых, настройки вашего разъема неверны. На брокере 1 вы используете это:
<connector name="netty-connector">tcp://0.0.0.0:61616</connector>
И на брокере 2 вы используете это:
<connector name="netty-connector">tcp://0.0.0.0:61617</connector>
Эта информация о соединителе отправляется каждым членом кластера, чтобы сообщить другим членам кластера, как они могут подключиться обратно к узлу, который отправил информацию. Например, в вашем случае брокер 1 сообщает брокеру 2, что он может подключиться к брокеру 1, используя tcp://0.0.0.0:61616
. Это, конечно, неверно, поскольку мета-адрес 0.0.0.0
на самом деле не указывает на брокера 1. Когда брокер 2 пытается использовать этот URL-адрес, он потерпит неудачу, как вы видите.
Причина, по которой это работает при запуске обоих посредников на одном хосте, заключается в том, что 0.0.0.0
разрешит то же самое, что и localhost
.
Вам необходимо использовать действительный IP-адрес или имя хоста в конфигурации вашего соединителя, чтобы кластер мог сформироваться правильно.
Во-вторых, предоставленные вами журналы DEBUG
указывают, что многоадресный трафик не работает между двумя экземплярами Docker. Я рекомендую попробовать использовать кластеризацию static для устранения проблем многоадресной рассылки из среды. На брокере 1 вы можете использовать что-то вроде:
<connectors>
<connector name="netty-connector">tcp://broker1:61616</connector>
<connector name="broker2-connector">tcp://broker2:61617</connector>
</connectors>
...
<cluster-connections>
<cluster-connection name="my-cluster">
<connector-ref>netty-connector</connector-ref>
<static-connectors>
<connector-ref>broker2-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
В брокере 2 вы можете использовать что-то вроде:
<connectors>
<connector name="netty-connector">tcp://broker2:61617</connector>
<connector name="broker1-connector">tcp://broker1:61616</connector>
</connectors>
...
<cluster-connections>
<cluster-connection name="my-cluster">
<connector-ref>netty-connector</connector-ref>
<static-connectors>
<connector-ref>broker1-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
Конечно, вам нужно использовать IP-адрес или имена хостов для фактических узлов в соединителях.