Вопрос

Процесс A - это расчетные значения для объектов A1, A2, A3 и т. Д., И отправляют результаты в очередь средних программ (rabritmq). Потребители читают очередь и обрабатывают эти результаты дальше. Периодически процессы A должны отправлять снимок этих значений, поэтому потребители могли выполнять некоторые другие расчеты. Значения для этих объектов могут измениться независимо. Очередь может выглядеть такими, как этот элемент в очереди обрабатывает в очереди A1, A1, A2, A1, A2, A2, A2 ... Снимок должен содержать все объекты, и потребители будут обрабатывать это сообщение для всех объектов в одном Go.

Таким образом, требование состоит в том, чтобы иметь очередь, подобную этому: A1, A1, A3, A2, A2, [Snapshot, A1, A2, A3], A3, A1 ... Проблема в том, что эти элементы имеют разные типы: один тип Для объектов, таких как A1, A2 и другие для снимка. Это означает, что они должны быть обработаны в разных очередях, но в этом случае есть состояние гонки: потребители могут обрабатывать объекты перед обработкой снижения.

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top