Я пишу обработчик сообщений для приложения передачи сообщений ebXML. Сообщение следует шаблону запроса-ответа. Процесс прост: отправитель отправляет сообщение, получатель получает сообщение и отправляет ответ. Пока все хорошо.
При получении сообщения получатель имеет установленное время ответа (TTR) на сообщение. Это может быть где угодно от секунд до часов / дней.
У меня такой вопрос: как отправителю обращаться с TTR? Мне нужно, чтобы это был асинхронный процесс, поскольку TTR может быть довольно длинным (несколько дней). Как можно как-то отсчитать таймер, но не связывать системные ресурсы на большие промежутки времени. Могут быть большие объемы сообщений.
Моя первоначальная идея состоит в том, чтобы иметь коллекцию "Ожидание", к которой добавляется идентификатор сообщения, а также время его истечения TTR. Затем я бы регулярно проводил опрос коллекции. По истечении таймера идентификатор сообщения будет перемещен в коллекцию с истекшим сроком, и транзакция сообщения будет прервана.
Когда отправитель получает ответ, он может проверить коллекцию «Ожидание» на соответствие отправленного сообщения и подтвердить, что ответ был получен вовремя. Затем сообщение будет удалено из коллекции для следующего этапа обработки.
Похоже ли это на надежное решение? Я уверен, что это решенная проблема, но об этом типе алгоритма очень мало информации. Я планирую реализовать его в C #, но я думаю, что язык реализации на данном этапе не имеет значения.
Спасибо за ваш вклад