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.(...))

в заклинании настройки Ребуса.

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

Другие вопросы по тегам