TimeToBeReceived - хороший вариант, но он не помогает, когда конечная точка запущена и работает.У сообщений не будет времени на истечение срока, и они будут обработаны.
Подход саги может работать, но это будет означать, что существуют серии сообщений с некоторым уникальным идентификатором для каждой серии.Я не видел этого в вашем описании.
Учитывая, что конечная точка обработки может быть отключена в любой момент времени, я предполагаю, что есть общее исходное сообщение (не уникальное), отправленное, возможно, несколько раз, в то время как конечная точкавнизЯ бы имел обработчик в отдельной конечной точке и настроил бы эту конечную точку на отбрасывать старые сообщения при запуске . Таким образом, все сообщения, приходящие, когда конечная точка не работает, будут отбрасываться.Есть несколько предостережений с этим.
- Все сообщения в очереди будут удалены.Поэтому нужно быть осторожным, какие другие сообщения отправляются в очередь.
- Если вы хотите, чтобы обработчик отвечал на первое сообщение в серии, это не сработает, поскольку нет способа узнать, было ли первое сообщениеотправляется, когда конечная точка работала или нет.
В случае, если вторая пуля - это то, с чем вы сталкиваетесь, наличие состояния неизбежно.