Поскольку вы спрашиваете об упорядочении потребления сообщений между различными темами, тогда первым вариантом было бы, чтобы один потребитель выдал сообщение, накормив следующего потребителя (эти потребители могут или не могут быть частью одного и того же процесса).):
потребитель обрабатывает сообщение -> потребитель А помещает новое сообщение в другую тему -> потребитель Б получает это новое сообщение и обрабатывает -> потребитель Б помещает новое сообщение во вторую тему -> и т. Д ... и т. Д.
Я не удивлюсь, если потоки по сути делают это или похожий процесс под капотом.Вместо этого можно использовать любой другой тип интерфейса для межпроцессного взаимодействия: RDP, отображенные в память файлы, мьютекс, каналы;сделайте ваш выбор.
Если не в крайнем случае, я бы постарался не ставить разные события на одну и ту же тему.Когда вы помещаете несколько событий в одну очередь / тему, вы ограничиваете своих потребителей несколькими способами:
- Ваши контракты теперь тесно связаны для обоих событий.Чтобы изменить форму только одного из событий в этой отдельной теме, ваши потребители должны динамически десериализовать эти события на основе метаданных (магическое число, ключ-значение и т. Д.)
- Ваши шаблоны потребления могут быть меньшеэффективный.Что, если я просто заинтересован в одном из этих событий?Я должен прочитать событие, а затем выбросить его, если оно не то, что я ищу.
Реальный пример этого - парки развлечений.Допустим, у вас есть два типа посетителей парка развлечений: Fast-Pass и стандартные клиенты.Ваши бизнес-правила гласят, что клиенты Fast-Pass могут опередить обычных клиентов.
Если вы объедините их в одну очередь / тему, как вы это сделаете?Ответ - приоритетная очередь;Вы спрашиваете всех, кто присоединяется к очереди, если они быстро проходят, что склонно к ошибкам и неэффективно (это очередность с приоритетом; это может сработать, но это может быть не лучшим решением).Большинство парков развлечений решили эту проблему, создав две отдельные очереди (по одной для каждого типа клиента [событие / сообщение]).Теперь они могут распределять клиентов по двум отдельным операторам (один FastPass, один стандартный), или они могут иметь одного участника, выполняющего обе очереди, сначала освобождая очередь быстрого прохода.
В конце дня это зависит отВаши ограничения: это 10 сообщений в день или 1 миллиард, требуется ли вам немедленная согласованность или возможная согласованность, на устройстве IoT?