Rebus - отложенное сообщение, ровно один обработчик сообщения
Мне было интересно, справится ли шина Rebus Service со следующими вариантами использования:
- Очередь сообщений на будущую дату
- если есть сообщение ProcessInvoice с контекстом, подобным Customer Id: 1000, можем ли мы иметь ровно один обработчик, выполняющий сообщение. Таким образом, в случае дублирования сообщения оно не обрабатывается снова.
Спасибо
1 ответ
Конечно - Ребус может bus.Defer
сообщение какое-то TimeSpan
в будущее - например, отложить доставку сообщения до определенной даты, что-то вроде этого может сделать это:
var delay = utcTimeOfWhenToDeliverTheMessage - DateTime.UtcNow;
bus.Defer(delay, messageToPostpone);
который требует, чтобы был настроен менеджер тайм-аута. Вы можете настроить менеджер времени ожидания, перейдя
Configure.With(...)
.(...)
.Timeouts(t => t.(...))
в заклинании настройки Ребуса.
Если вы хотите гарантировать, что данное сообщение будет обработано только один раз, даже если дубликаты могут быть доставлены, есть пара моментов, на которые стоит обратить внимание - трудно сказать вам самый простой способ обработки, потому что иногда может быть легко сделать совершенное действие идемпотент, в других случаях вам нужно будет отслеживать идентификатор обработанного сообщения и т. д.