Какая очередь сообщений позволяет увидеть ход пакета сообщений? - PullRequest
0 голосов
/ 14 сентября 2018

Я обновил вопрос, чтобы ответить на комментарии @Deadpool и @Nicolas:

В настоящее время мы используем RabbitMQ.У нас многоэтапный процесс (Step1, Step2, Step3).

Step1 : опубликовать 100 сообщений в очереди с помощью группового ключа "batch1" (например, 100 JSON Products для запросов HTTP API, чтобы товары были вставлены / обновлены в онлайн-магазине).Рабочие должны обрабатывать пакет 1 параллельно ( Очередь рабочих ), например, 4 рабочих и 25 сообщений.Основная цель - параллельное выполнение «batch1» по соображениям производительности.

Step2 : должен начать работать, только если все 100 сообщений шага 1 были использованы / обработаны (например, все продукты были вставлены / обновлены).

Это означает, что либо step2 необходимо дождаться, пока все 100 сообщений "batch1" не будут использованы / обработаны n работниками

например

if (isNoMessageLeft(step1){
  // do step2 work
}

или step1 должны подождать, прежде чем перейти к шагу 2.

Например,

if (isNoMessageLeft(step1){
  // continue to step2
}

Шаг 2 может потребоваться для работы с результатами Шаг 1 , но, возможно, нет.Просто важно, чтобы Step1 , Step2 и Step3 были обработаны, если предшественник был закончен.Это немного сравнимо с концепцией Read-your-own-write в базах данных.

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

В настоящий момент шаги 1-3 полностью последовательны (один поток в приложении Java), но мы хотели бы улучшить использование подхода Worker Queue, чтобы использовать кластер из нескольких рабочих для определенных задач.

Как можно приблизиться к чему-то подобному?(в идеале с RabbitMQ) или с другим продуктом очереди, например

Возможно ли это с Apache Kafka?

...