Вопрос шаблона обмена сообщениями - PullRequest
0 голосов
/ 07 апреля 2010

Процесс A вычисляет значения для объектов a1, a2, a3 и т. Д. И отправляет результаты в очередь промежуточного программного обеспечения (RabbitMQ). Потребители читают очередь и обрабатывают эти результаты дальше. Периодически процесс А должен посылать снимок этих значений, чтобы потребители могли сделать некоторые другие вычисления. Значения для этих объектов могут меняться независимо. Очередь может выглядеть следующим образом: a1, a1, a2, a1, a2, a2, a3 ... Потребители обрабатывают каждый элемент в очереди. Снимок должен содержать все объекты, и потребители будут обрабатывать это сообщение для всех объектов за один раз.

Таким образом, требуется, чтобы очередь была такой: : один тип для таких объектов, как a1, a2 и другой для снимка. Это означает, что они должны обрабатываться в разных очередях, но в этом случае возникает условие гонки: потребители могут обрабатывать объекты перед обработкой снимка.

Есть какой-нибудь шаблон для решения этой (довольно распространенной) проблемы? Мы используем RabbitMQ для очередей сообщений.

1 Ответ

0 голосов
/ 07 апреля 2010

Используйте одну очередь для каждого потребителя и префикс типа содержимого, чтобы указать тип доставляемого сообщения. Думаю, что в сообщениях AMQP может быть атрибут type, но я никогда не использовал его, поэтому не знаю, применим ли он к этой проблеме.

...