Resubmitting a message from dead letter queue - Azure Service Bus

后端 未结 6 1613
太阳男子
太阳男子 2021-01-11 14:30

I have created a service bus queue in Azure and it works well. And if the message is not getting delivered within default try (10 times), it is correctly moving the message

6条回答
  •  佛祖请我去吃肉
    2021-01-11 14:46

    Try to remove dead letter reason

    resubmittableMessage.Properties.Remove("DeadLetterReason");
    resubmittableMessage.Properties.Remove("DeadLetterErrorDescription");
    

    full code

    using Microsoft.ServiceBus.Messaging;
    using System.Transactions;
    
    namespace ResubmitDeadQueue
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                var connectionString = "";
                var queueName = "";
    
                var queue = QueueClient.CreateFromConnectionString(connectionString, QueueClient.FormatDeadLetterPath(queueName), ReceiveMode.PeekLock);
    
                BrokeredMessage originalMessage
                    ;
                var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
                do
                {
                    originalMessage = queue.Receive();
                    if (originalMessage != null)
                    {
                        using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                        {
                            // Create new message
                            var resubmittableMessage = originalMessage.Clone();
    
                            // Remove dead letter reason and description
                            resubmittableMessage.Properties.Remove("DeadLetterReason");
                            resubmittableMessage.Properties.Remove("DeadLetterErrorDescription");
    
                            // Resend cloned DLQ message and complete original DLQ message
                            client.Send(resubmittableMessage);
                            originalMessage.Complete();
    
                            // Complete transaction
                            scope.Complete();
                        }
                    }
                } while (originalMessage != null);
            }
        }
    }
    

    Thanks to some other responses here!

提交回复
热议问题