Как посмотреть и удалить сообщение из тупика в azureservicebus

Я создал приложение-тему Azure Service Bus, которое просматривает все сообщения в deadletter. Некоторые определенные сообщения (с определенным идентификатором сообщения), которые я посмотрел, должны быть удалены из очереди deadletter. Пожалуйста, предоставьте помощь для реализации этого.

3 ответа

Позвонив по ссылке со ссылкой на полученное сообщение, полученное из очереди недоставленных сообщений, вы можете удалить его из очереди недоставленных сообщений.

https://msdn.microsoft.com/library/azure/microsoft.servicebus.messaging.brokeredmessage.complete.aspx

Во-первых, если вам нужно знать, как создать тему служебной шины и подписку:

Чтобы получить сообщение из подписки, необходимо создать получатель сообщения:

//Create the messaging factory
var messagingFactory = MessagingFactory.CreateFromConnectionString("ServiceBusConnectionString");

// Get the dead letter path
var deadLetterPath = SubscriptionClient.FormatDeadLetterPath("TopicPath", "subscriptionName");

// Get the message receiver for the deal letter queue.
var messageReceiver = messagingFactory.CreateMessageReceiver(deadLetterPath);

Тогда вы можете просто прослушать приходящие сообщения:

// This is the list of ids that need to be delete
var messageIdsToDelete = new List<long>(...);
messageReceiver.OnMessage((message) =>
{
    // Check if we have to delete the message
    if (messageIdsToDelete.Contains(message.SequenceNumber))
    {
        // Complete and delete the message from the queue.
        message.Complete();
    }

}, new OnMessageOptions());

Этот код помогает вам удалить сообщение о недоставке в служебной шине Azure.

MessageReceiver fromQueueClient = null;

        MessagingFactory factory = MessagingFactory.CreateFromConnectionString(connectionString);
        fromQueueClient = await factory.CreateMessageReceiverAsync(_entityName, ReceiveMode.PeekLock);

            BrokeredMessage _message = await fromQueueClient.ReceiveAsync(SequenceNumber);

                await _message.CompleteAsync();