Отложенное выполнение очереди в Azure Service Bus
От: Doc Россия http://andrey.moveax.ru
Дата: 25.08.18 08:51
Оценка:
Ситуация
— есть topic в Azure Service Bus
— используются сессии, т.к. очередность важна
— сообщения перед отправкой в топик получают SessionId исходя из данных самого сообщения (т.е. SessionId генерируются на лету)
— количество и частота сообщений для каждого SessionId не известны, а частота еще и не постоянна

Проблема:
при сбое в обработке сообщения необходимо отложить на определенное время дальнейшую обработку не только сообщения, но и всей очереди с сохранением порядка сообщений

Для получения сейчас используется вариант IMessageSessionAsyncHandlerFactory

message.Abandon() или пересоздание сообщения c указанием задержки не варианты, т.к. текущее сообщение станет последним в очереди. Да и остальные сообщения сессии это не задержит.
Так же вычитать всю сессию не подходит. Если сообщения приходят быстро, то есть большая вероятность что после вычитывания всей сессии и до ее повторной публикации в topic успеют добавиться новые сообщения.
Можно приостанавливать получающий handler, но число handler конечно. Это приводит к уменьшению скорости обработки, а теоретически могут "встать" все handler (если в каждом будет по сбою)

Вроде перечитал все что в документации, но варианта как отложить сессию на заданное время не нашел. Может что упустил?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.