ZeroMQ не может публиковать sh сообщений - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь заставить базовую c реализацию издателя и подписчика ZMQ работать, но молча происходит сбой. Я использую JeroMQ 0.5.2 (текущая версия) и Java 8.

Рассмотрим следующий официальный тестовый файл: https://github.com/zeromq/jeromq/blob/master/src/test/java/org/zeromq/PubSubTest.java

У меня есть полностью скопировал первый тест (testRaceConditionIssue322) в новый основной класс и запустил его. Издатель связывается с портом и утверждает, что отправляет каждое сообщение, но получатель не получает ни одного сообщения. Добавление журналов означает, что подписчик считает себя подписанным до того, как издатель отправит сообщения.

Я пробовал это на двух компьютерах, а также с другим кодом, и каждый раз получался один и тот же результат net. Что дает?

1 Ответ

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

Хорошо, я понял это. Две вещи сошлись неудачным образом.

  1. Тест, который я связал, был, возможно, нарочно, подписчиком перед издателем. По какой-то причине подписчик сообщил об успешном соединении, хотя издатель еще не открыл порт. Он не установил соединение и не получил сообщения, отправленные впоследствии. Когда я удостоверился, что издатель был связан и прослушивал соединения, а затем подписчик подключился, а затем издатель опубликовал сообщения, все работало так, как я ожидал.
  2. ДРУГОЙ код, который я использовал в качестве подписчика, там была строчка, которую я не заметил - socket.hasReceiveMore(). Он ожидал две строки в одном сообщении, но я отправлял две строки отдельно. Это означало, что часть кода получателя никогда не выполнялась - он получал строки, которые я отправлял, но отбрасывал их как частичные сообщения. Когда я отправил свою первую строку с флагом publisher.send(msg, ZMQ.SNDMORE); (а вторая без), она работала, как я ожидал.
...