ActiveMQ предотвращает обработку конкретного сообщения потребителем - PullRequest
0 голосов
/ 01 июля 2018

У нас есть проблема дизайна, где ситуация выглядит следующим образом:

Есть несколько производителей и несколько потребителей (в одной очереди).

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

Проблема в том, что есть определенные задачи, которые занимают много памяти (и мощности процессора), и мы знаем, что потребитель не способен справиться с этим. хорошо то, что мы знаем, сколько памяти (и мощности процессора) он может приблизительно забрать заранее, поэтому мы могли бы запретить потребителю выполнить эту задачу и дать изменение другому потребителю с достаточным объемом памяти для обработки.

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

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

Не уверен, что это правильный подход или есть лучший способ?

1 Ответ

0 голосов
/ 02 июля 2018

У сообщений могут быть установлены свойства, указывающие, потребуется ли им высокая загрузка ЦП и / или памяти, и тогда потребители могут использовать селекторы для получения только тех сообщений, которые соответствуют их аппаратным ограничениям.

...