Как создать Multi-Destination-Cast в библиотеке Aeron

Я пытаюсь использовать транспорт Multi-Destination-Cast, но не знаю, как его настроить, Я пытаюсь реализовать примеры URI, объясненные здесь, используя SimplePublisher.java и SimpleSubscriber.java

У меня один издатель и два подписчика.

Из параметров aeron по умолчанию, содержащих SimplePublisher.java и SimpleSubscriber.java, я изменил:

Из SimplePublisher.java

final String channel = "aeron:udp?control=192.168.0.3:4050|control-mode=manual";

И из SimpleSubscriber.java:

Я продублировал классы SimpleSubcriber1.java и SimpleSubcriber2.java и изменил следующую конфигурацию:

SimpleSubcriber1:

final String channel = "aeron:udp?endpoint=192.168.0.4:4051"

а также

SimpleSubcriber2:

final String channel = "aeron:udp?endpoint=192.168.0.5:4052"

Ошибки, которые я получаю как для издателя, так и для подписчика, практически идентичны:

Для Издателя:

Publishing to aeron:udp?control=192.168.0.3:4050|control-mode=manual on stream Id 10
io.aeron.exceptions.ChannelEndpointException: RuntimeException : Channel error: Cannot assign requested address: bind : aeron:udp?control=192.168.0.3:4050|control-mode=manual
at io.aeron.ClientConductor.onChannelEndpointError(ClientConductor.java:196)
at io.aeron.DriverEventsAdapter.onMessage(DriverEventsAdapter.java:77)
at org.agrona.concurrent.broadcast.CopyBroadcastReceiver.receive(CopyBroadcastReceiver.java:100)
at io.aeron.DriverEventsAdapter.receive(DriverEventsAdapter.java:56)
at io.aeron.ClientConductor.service(ClientConductor.java:660)
at io.aeron.ClientConductor.doWork(ClientConductor.java:151)
at org.agrona.concurrent.AgentRunner.doDutyCycle(AgentRunner.java:233)
at org.agrona.concurrent.AgentRunner.run(AgentRunner.java:159)
at java.lang.Thread.run(Thread.java:748)
Failed to connect to subscriber

И для подписчика:

Subscribing to aeron:udp?endpoint=192.168.0.4:4051 on stream Id 10
io.aeron.exceptions.ChannelEndpointException: RuntimeException : Channel error: Cannot assign requested address: bind : aeron:udp?endpoint=192.168.0.4:4051
at io.aeron.ClientConductor.onChannelEndpointError(ClientConductor.java:187)
at io.aeron.DriverEventsAdapter.onMessage(DriverEventsAdapter.java:77)
at org.agrona.concurrent.broadcast.CopyBroadcastReceiver.receive(CopyBroadcastReceiver.java:100)
at io.aeron.DriverEventsAdapter.receive(DriverEventsAdapter.java:56)
at io.aeron.ClientConductor.service(ClientConductor.java:660)
at io.aeron.ClientConductor.doWork(ClientConductor.java:151)
at org.agrona.concurrent.AgentRunner.doDutyCycle(AgentRunner.java:233)
at org.agrona.concurrent.AgentRunner.run(AgentRunner.java:159)
at java.lang.Thread.run(Thread.java:748)

Если вам нужно, я могу дать вам более подробную информацию обо всем.

PD: У меня есть MediaDriver и LowLatencyMediaDriver, проблема не в этом.

заранее спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
446
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Настройте следующим образом:

Издатель:

aeron:udp?control=<publisher-ip>:<publisher-port>|control-mode=dynamic

Подписчики:

aeron:udp?endpoint=<subscriber-ip>:<subscriber-port>|control=<publisher-ip>:<publisher-port>|control-mode=dynamic

Режим управления по умолчанию для MDC - динамический (и его можно не указывать). Каждая подписка будет регистрироваться по каналу управления и впоследствии будет получать сообщения на указанную конечную точку.

Альтернативой является использование «ручного» режима управления, когда Подписки добавляются вручную Публикацией с использованием addDestination / removeDestination.

Что касается полученной вами ошибки:

Cannot assign requested address: bind : aeron:udp?endpoint=192.168.0.4:4051 at io.aeron.ClientConductor.onChannelEndpointError(ClientConductor.java:187)

Вероятно, вы получили это сообщение, потому что что-то уже прослушивало этот порт или интерфейс не существует на этом хосте.

Другие вопросы по теме