Я использую библиотеку C # NetMQ. У меня есть служба продюсера и потребителя, развернутая в Azure с использованием служб с сохранением состояния Service Fabric. У меня есть обе службы разделены так, что есть два экземпляра каждого.
Каждый экземпляр производителя создает PublisherSocket
и вызывает Bind
. Первое связывается с (например) tcp://10.0.0.1:9501
, а второе с tcp://10.0.0.2:9502
. (Порты остаются уникальными, поскольку SF может перебалансировать два экземпляра для работы на одном физическом узле.)
Они публикуют какую-то произвольную тему (не имеет отношения к этому вопросу). (Я звоню SendMultipartMessage
и передаю NetMQMessage
с несколькими кадрами данных.)
Каждый экземпляр потребителя создает SubscriberSocket
и вызывает Connect
. Каждый из них подключается к обоим адресам производителя. Затем они вызывают Subscribe
и передают пустую строку ""
в качестве темы. Это должно заставить их использовать все сообщения, отправленные любым из производителей.
Ожидаемые результаты:
- Оба производителя связываются, и оба потребителя подключаются / подписываются.
- Producer1 отправляет сообщение A, а Producer2 отправляет сообщение B.
- Consumer1 получает и A, и B.
- Consumer2 получает и A, и B.
Фактические результаты для локального кластера SF : Все как положено. Оба потребителя получают все сообщения от обоих производителей.
Фактические результаты для SF-кластера, работающего в Azure :
- Привязка / подключение / подписка - все это происходит без исключения или очевидно
ошибка.
- Производители отправляют сообщения без ошибок.
- Оба потребителя получают сообщения от производителя 1.
- Ни один потребитель не получает сообщений от Producer2.
Примечания:
- Производство находится в цикле, так что это не какая-то странная проблема при запуске.
- Увеличение количества производителей / потребителей (например, по 5 экземпляров каждого) приводит к тому, что сообщения сначала производителя всегда потребляются, а затем некоторые сообщений других производителей составляют потребляются. Приблизительно половина всех сообщений потребляется, но я не вижу никакой очевидной картины.
Вопросы:
- Есть ли что-то странное в комбинации кластера Service Fabric, работающей в Azure, плюс ZeroMQ, которая вызывает проблемы с ZeroMQ?
- Есть ли какие-либо опции сокетов ZeroMQ, которые я должен установить?
- Есть ли в SF что-то, что я могу изменить?
Любые идеи приветствуются.