How to use the MessageReceiver.Receive method by sequenceNumber on ServiceBus

后端 未结 2 1091
南笙
南笙 2021-01-13 03:07

I\'m trying to resubmit a message from a deadletter queue.

I am can replay a message on a dead letter queue, thats fine. The problem is when I want to now delete thi

相关标签:
2条回答
  • 2021-01-13 03:52

    After creating receiver you can politely start receiving all messages (without being picky) till you encounter message with your SequenceNumber, call Complete() on the message and stop iterating the queue. i.e

            while (true)
            {
                BrokeredMessage message = receiver.Receive();
                if (message.SequenceNumber == sequenceNumber)
                {
                    message.Complete();
                    break;
                }
            }
    

    Without completing message it remains in the queue and that's what you want (at least in .NET 4.5. Worth to note that if your Sequence Number is not found Receiver will loop the queue indefinitely.

    0 讨论(0)
  • 2021-01-13 04:02

    The deadletter queue is processed in sequence just like any other queue.

    The Receive(seqNo) method is used in combination with Defer(), which puts the message into a different secondary Queue - the "deferral queue". The deferral queue exists for scenarios where you are getting messages out of the expected order (eg. in a state machine) and need a place to put the messages that arrived early. Those you can park with Defer() and make a note of that (probably even in session state) and then pull the messages once you're ready to do so. The Workflow Manager runtime used by SharePoint uses that feature, for instance.

    0 讨论(0)
提交回复
热议问题