Я пишу фрагмент кода, который позволит нам:
- Просмотр списка всех недоставленных сообщений, существующих в теме служебной шины Azure (просмотр)
- Исправьте и отправьте обратно в Тему
- Удалите их из очереди недоставленных писем при повторной отправке.
У меня нет проблем с первыми двумя пунктами; используя режим получения Peek, я могу показать список сообщений, и мы можем редактировать и повторно отправлять без проблем.
Проблема возникает, когда я действительно хочу удалить сообщение из очереди недоставленных сообщений.
Как это сделать на уровне сообщения? Мы можем удалить только 2 сообщения, находящихся в очереди недоставленных сообщений, а остальные оставить для проверки на более позднем этапе. Удаляет ли вызов .Complete()
сообщения в очереди недоставленных сообщений, как это происходит в основной подписке?
Для справки; вот наш код для получения SubscriptionClient
для очереди недоставленных сообщений:
private SubscriptionClient GetOrCreateSubscriptionClient(string connectionString)
{
if (!NamespaceManager.TopicExists(_topicName))
{
NamespaceManager.CreateTopic(new TopicDescription(_topicName)
{
MaxSizeInMegabytes = 5120,
DefaultMessageTimeToLive = TimeSpan.FromSeconds(DEFAULT_LOCK_DURATION_IN_SECONDS)
});
}
if (!NamespaceManager.SubscriptionExists(_topicName, _subscriptionName))
{
NamespaceManager.CreateSubscription(_topicName, _subscriptionName);
}
var deadLetterPath = SubscriptionClient.FormatDeadLetterPath(_topicName, _subscriptionName);
var client = SubscriptionClient.CreateFromConnectionString(
connectionString, deadLetterPath, _subscriptionName, ReceiveMode.PeekLock);
return client;
}