Ошибка при отправке сообщений в цикле в брокер windows rabbitmq - PullRequest
0 голосов
/ 08 октября 2018

Мои настройки

  • У меня есть ситуация, когда я отправляю около 15 сообщений в цикле с одного компьютера на другой через rabbitmq.

  • Существует Настройка NAT между отправляющей и принимающей машиной.

  • Я использую spring rabbitmq для всех операций rabbitmq.

  • На принимающей машине я теряю 2 сообщения иногда , которые никогда не принимаются даже после долгого ожидания.

  • Итакже я не вижу сообщений, накопленных в очереди (как на отправляющей, так и на принимающей машине).

  • А также есть только прослушиватель очереди в принимающей машине.

Мой вопрос

  • если я отправляю сообщения в цикле на rabbitmq, есть ли шанс, что он отклонит некоторые сообщения, если не сможет их обработать?Общий размер 15 сообщений составляет около 8 МБ.

Я не вижу никаких исключений даже после того, как я выполню отправку сообщения rabbitmq.

КОД ОТПРАВЛЯЮЩЕЙ МАШИНЫ

@Override
    public boolean send(final Message message, final String routingKey)
            throws SinecnmsMessagingException {
        private RabbitTemplate rabbitTemplate = null;
        rabbitTemplate.send(routingKey, message);

    }

ПОЛУЧЕНИЕ КОДА МАШИНЫ

<rabbit:listener-container
            connection-factory="connectionFactory">
            <rabbit:listener ref="onMessageCommand"
                queue-names="TestQueue" />
        </rabbit:listener-container>
        <bean id="onMessageCommand"
            class="com.test.OnMessageListner">
            <property name="callBackObject" ref="callbackEvent" />
            <property name="template" ref="amqpTemplate" />
        </bean>

        <bean id="callbackEvent" class="com.test.SettingsListener"></bean>

OnMessageListner реализует MessageListener.

В классе SettingsListener я получаю сообщения.Это работает хорошо для всех меня в другом коде, который я разработал.Только в этом случае использования, о котором я упоминал, я наблюдаю за этой проблемой.

1 Ответ

0 голосов
/ 09 октября 2018

Значит ли это, что издатель подтверждает, что концепция была введена, потому что иногда rabbitmq может «отклонять / не принимать» сообщения.С помощью подтверждения издателя мы можем узнать, было ли получено первое сообщение брокером rabbitmq, а затем отправить второе сообщение.

Можем ли мы это сделать?

Нет, вы не можете;ожидание каждого подтверждения замедлит публикацию;Подтверждения разработаны таким образом, что вы отправляете кучу сообщений, а затем ждете подтверждения.

Это не было >introduced because sometimes rabbitmq may "reject/not accept" messages;публикация с RabbitMQ является асинхронной;таким образом, публикация в целом успешна - но между отправкой сообщения и его доставкой посреднику может произойти все что угодно - если соединение потеряно, клиенту сообщают об этом, но уже слишком поздно для издателя, поскольку он уже успешно завершил работу.

NAT не должен иметь никакого значения, но, возможно, проблема может быть в некотором нестабильном сетевом маршрутизаторе.

Вы можете использовать сетевой монитор (например, WireShark), чтобы увидеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...