Вручную совершая в Ребус с Кафкой - PullRequest
1 голос
/ 24 марта 2020

Используя Kafka в качестве транспорта через эту библиотеку , есть ли способ с помощью Rebus контролировать, когда потребитель отправит сообщение? Я хочу получить событие от Кафки, выполнить какую-то работу, которая, возможно, могла бы исключить / потерпеть неудачу, и только в случае успеха, сказать Кафке, чтобы сдвинуть смещение вперед.

1 Ответ

2 голосов
/ 26 марта 2020

Я являюсь автором используемой вами библиотеки "Ребус.Кафка" . Вы можете только прекратить принимать публикации полностью, отписавшись от подписки. Затем откатите смещение и повторно обработайте очередь. Желание прекратить обработку сообщений - неестественное желание для пользователей автобусов. В качестве альтернативы остановке шины вы можете рассмотреть следующие варианты:

  1. конвейер обработчика
  2. Automati c повторных попыток и обработка ошибок
  3. Рабочие и параллелизм

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

Дополнение:

Если вас не устраивает параметр по умолчанию EnableAutoCommit = true, вы можете установить его значение, а также все другие параметры для производителя и потребителя в параметрах конфигурации.

EnableAutoCommit = false,

Как это сделать, показано в этом примере использования транспорта "Rebus.Kafka" : https://github.com/glazkovalex/Rebus.Kafka/blob/master/Examples/Scaleout.Producer/Program.cs

Обратите внимание, что текущая версия транспорта с отключенным autoCommit, получает пять сообщений и после обработки перемещает указатель. Другими словами, если служба прерывается с отключенным autoCommit, при перезапуске служба может повторно обработать до пяти сообщений. Количество этих повторно обработанных сообщений может быть изменено в будущих версиях транспорта "Rebus.Kafka" .

...