Могу ли я использовать один и тот же идентификатор корреляции в AMQP более одного раза? - PullRequest
1 голос
/ 05 апреля 2011

Допустим, у меня есть очередь, которую слушают несколько потребителей. Я помещаю запрос в очередь, и один из потребителей обработает его и отправит мне ответ.

Теперь, допустим, я нетерпелив, и если ответ не приходит через некоторое время, я запускаю другой запрос.

В этом случае я могу повторно использовать тот же идентификатор корреляции? Если ответ приходит несколько раз, я просто проигнорирую дополнительный ответ.

Звучит достаточно разумно для меня, но я просто хотел еще раз проверить, что в любом случае AMQP не испортит.

P.S. Я использую RabbitMQ 2.4 с rabbitmq-java-client 2.2

1 Ответ

1 голос
/ 05 апреля 2011

У меня такое чувство, что оно будет работать нормально. Хотя с классом RpcClient я мало что сделал, я считаю, что он просто блокирует ожидание появления коррелированного ответного сообщения в соответствующей очереди ответов. Поэтому, если вы запускаете другой запрос с тем же идентификатором из другого потока в вашем «клиентском» приложении (в результате чего коррелированный ответ, наконец, появляется), вызов RpcClient вернется.

Конечно, брокеру все равно, так как он должен просто передавать идентификатор корреляции как непрозрачное свойство сообщения.

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

...