Аварийное переключение для клиента NodeJS rhea AMQP - PullRequest
0 голосов
/ 01 марта 2020

На моей машине запущено несколько экземпляров ActiveMQ. Они настроены как главный подчиненный файловой системы . Если один сервер ActiveMQ не работает, то другой должен быть выбран автоматически. Это работает, как и ожидалось.

Соответствующая конфигурация для первого экземпляра ActiveMQ:

<transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61626?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61623?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1889?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61625?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<persistenceAdapter>
    <kahaDB directory="/Users/srikanth.doddi/Downloads/apachemq3.2.4/data/kahadb"/>
</persistenceAdapter>

Соответствующая конфигурация для второго экземпляр ActiveMQ:

<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&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5673?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<persistenceAdapter>
    <kahaDB directory="/Users/srikanth.doddi/Downloads/apachemqold/data/kahadb"/>
</persistenceAdapter>

Я использую соединение AMQP в NodeJS, использую rhea следующим образом:

var container = require('rhea');
container.on('message', function (context) {
    console.log(context.message.body);
    context.connection.close();
});
container.once('sendable', function (context) {
    context.sender.send({body:'Hello World!'});
});
var connection = container.connect({'port':5672});
connection.open_receiver('examples');
connection.open_sender('examples');

Теперь, так как У меня ActiveMQ работает как главный-подчиненный, если 5672 не работает, я хочу, чтобы клиент автоматически подключился к 5673 и продолжал работать. Эта проверка должна выполняться непрерывно.

Вот как это реализовано в Spring-boot

activemq_url=tcp://localhost:61616,tcp://localhost:61626

spring.activemq.broker-url=failover://(${activemq_url})?randomize=false

1 Ответ

0 голосов
/ 03 марта 2020

Вы должны проделать некоторую работу для создания своего клиентского кода таким образом, чтобы происходило повторное соединение, у rhea нет такой поддержки обработки отказа, которую делают такие клиенты, как Qpid JMS или клиент Artemis Core JMS.

Там это повторное соединение пример в дереве исходных кодов Rhea, которое вы можете использовать в качестве отправной точки для создания этих логик c в своем собственном приложении.

...