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