В этом блоге мы увидим, как
работают дуплексные сетевые разъемы .
В предыдущей
части 1 мы создали сетевой коннектор от broker-1 и broker-2. Мы смогли увидеть, как сообщения для очереди «foo.bar» на broker-1 переадресовывались в очередь «foo.bar» на broker-2, когда был получатель на broker-2 для очереди «foo.bar»
Давайте попробуем сделать обратное, производя сообщения в очередь broker-2 foo.bar и потребляя из очереди broker-1 «foo.bar»
Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp://localhost:61626 -Dtopic=false -Ddurable=true -Dsubject=foo.bar -Dmax=100 Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar
В предыдущем сообщении в блоге мы поместили в очередь 100 сообщений в очереди. Следовательно, #meagesages в очереди теперь показывает как 200 здесь.
Как показано выше, 100 новых сообщений помещаются в очередь в очереди foo.bar на broker-2, но нет потребителей, хотя есть сетевой соединитель для всех очередей от broker-1 до broker-2.
Причина заключается в том, что сетевой соединитель, если он не указан как «дуплекс», является однонаправленным от источника к посреднику назначения.
Давайте изменим следующий атрибут, выделенный желтым цветом в /Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-1/conf/activemq.xml файл конфигурации для broker-1.
<networkConnectors> <networkConnector name="T:broker1->broker2" uri="static:(tcp://localhost:61626)" duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2" dynamicOnly="true"> <excludedDestinations> <queue physicalName=">" /> </excludedDestinations> </networkConnector> <networkConnector name="Q:broker1->broker2" uri="static:(tcp://localhost:61626)" duplex="true" decreaseNetworkConsumerPriority="true" networkTTL="2" dynamicOnly="true"> <excludedDestinations> <topic physicalName=">" /> </excludedDestinations> </networkConnector> </networkConnectors>
Давайте перезапустим брокеров и подключимся к брокерам с помощью jConsole.
Вот скриншот вкладки jConsole MBean broker-1, на котором показано следующее:
- Q: сетевой разъем broker1-> broker2 является дуплексным.
- Теперь в broker-1 существует динамический производитель из broker-2, поскольку
сетевой соединитель Q: broker1-> broker2 является «дуплексным».
Вот скриншот вкладки jConsole MBean broker-2, на котором показано следующее:
- Дуплексный сетевой разъем от брокера-2 к брокеру-1
- Два динамических производителя сообщений от брокера-1 до брокера-2
- Обратите внимание, что сетевой соединитель «Q: broker1-> broker2» отображается как дуплекс, настроенный в файле activemq.xml.
Давайте посмотрим это в действии
- Производитель 100 сообщений в брокер-2
Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp://localhost:61626 -Dtopic=false -Ddurable=true -Dsubject=foo.bar -Dmax=100
Снимок экрана с очередями в брокере-2: http: // localhost: 9161 / admin / queues.jsp
2. Создайте потребителя на foo.bar на брокере-1
Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar
The following screenshot from broker-2 shows that all the 100 messages have been dequeued by a consumer (dynamically forwarded to broker-1).
http://localhost:9161/admin/queues.jsp
The following screenshot shows the details of this dynamic consumer on broker-2’s foo.bar queue.
http://localhost:9161/admin/queueConsumers.jsp?JMSDestination=foo.bar
The following screenshot shows that the 100 messages which were dynamically moved from broker-2’s foo.bar queue to broker-1’s foo.bar queue have been successfully consumed by the consumer which we created in step #2
This concludes part 2 of this series where we saw how duplex network connectors work.
As always your comments are very welcome.
Stay tuned for part 3 where we will go over load balancing consumers on local/remote brokers…