Для ориентированного на сообщение промежуточного программного обеспечения, которое последовательно не поддерживает сообщения с приоритетом (такие как AMQP), что лучший способ состоит в том, чтобы реализовать приоритетное потребление, когда у очередей есть только семантика FIFO? Случай общего использования был бы системой, в которой потребители получают сообщения более высокого приоритета перед сообщениями более низкого приоритета, когда большое отставание сообщений существует в Очереди (очередях).
Учитывая поддержку только FIFO для заданной одной очереди, вам, конечно, придется ввести либо несколько очередей, либо посредника, либо иметь более сложного потребителя.
Несколько очередей можно обрабатывать несколькими способами. Производитель и потребитель могут договориться о наличии между ними двух очередей, одна для высокоприоритетных, а другая для фоновых задач.
Если ваш производитель ограничен одной очередью, но у вас есть контроль над потребителем, подумайте о введении маршрутизатора с функцией разворота в пути. Таким образом, производитель->маршрутизатор представляет собой единую очередь, и у маршрутизатора есть две очереди к потребителю.
Другим способом решения этой проблемы, который, скорее всего, менее чем идеален, было бы заставить потребителя прокрутить поток перед очередью, а затем отправить работу внутри маршрутизатора. Что-то вроде версии маршрутизатора выше, но внутри одного приложения. Недостатком этого является наличие множества сообщений в полете внутри вашего приложения, что может затруднить восстановление в случае сбоя.
Не забудьте рассмотреть проблему голодания эффективно низкоприоритетных событий, какими бы они ни были, если некоторые из них должны быть обработаны, даже если события с более высоким приоритетом все еще висят.
.