В FIFO система Qeueing, что лучший способ для реализации приоритетного обмена сообщениями

Для ориентированного на сообщение промежуточного программного обеспечения, которое последовательно не поддерживает сообщения с приоритетом (такие как AMQP), что лучший способ состоит в том, чтобы реализовать приоритетное потребление, когда у очередей есть только семантика FIFO? Случай общего использования был бы системой, в которой потребители получают сообщения более высокого приоритета перед сообщениями более низкого приоритета, когда большое отставание сообщений существует в Очереди (очередях).

9
задан quaternion 16 July 2009 в 17:48
поделиться

1 ответ

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

Несколько очередей можно обрабатывать несколькими способами. Производитель и потребитель могут договориться о наличии между ними двух очередей, одна для высокоприоритетных, а другая для фоновых задач.

Если ваш производитель ограничен одной очередью, но у вас есть контроль над потребителем, подумайте о введении маршрутизатора с функцией разворота в пути. Таким образом, производитель->маршрутизатор представляет собой единую очередь, и у маршрутизатора есть две очереди к потребителю.

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

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

.
10
ответ дан 4 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: