【问题标题】:Azure service bus | Re process dead letter messages back to queue | How to receive all messages from dead letter queue?Azure 服务总线 |重新处理死信消息返回队列 |如何接收来自死信队列的所有消息?
【发布时间】:2019-10-17 11:59:51
【问题描述】:

我想使用唯一标识符作为用户输入将消息处理集成回队列。如何在一次调用中从死信中获取所有消息,而不是多次循环?

        var msRequestIdArg = MsRequestIds.Split('\n').Select(e => e.Trim()).ToList();
        var msRootRequestArg = MsRootRequestIds.Split('\n').Select(e => e.Trim()).ToList();
        var queueClient = QueueClient.CreateFromConnectionString(ServiceBusConnectionString, QueueName);
        var factory = MessagingFactory.CreateFromConnectionString(ServiceBusConnectionString);
        var deadLetterPath = QueueClient.FormatDeadLetterPath(QueueName);
        var deadLetterQueueReceiver = factory.CreateMessageReceiver(deadLetterPath, ReceiveMode.PeekLock);
        deadLetterQueueReceiver.PrefetchCount = 10;
        var messageResponse = new List<Tuple<string, bool, string>>();
        var counter = msRequestIdArg.Count + msRootRequestArg.Count;

        while (counter > 0)
        {
            var brokeredMessage = await deadLetterQueueReceiver.ReceiveAsync().ConfigureAwait(false);

【问题讨论】:

    标签: c# azure servicebus


    【解决方案1】:

    简短的回答:你不能也不应该。

    假设您有数十万甚至数百万条消息需要返回。您能想象对于需要传输这么多消息的代理和客户端的限制吗?预计会发生故障,并且在消息数量非常多的情况下,您很快就会发现自己处于这样的情况下,这样的调用会持续失败,从而使您的系统无能为力。

    【讨论】:

    • 感谢您的意见。我知道我们应该创建一个监听器来跟踪任何即将到来的消息。但是,就我而言,我需要一种更好的方法来接收来自队列的消息。 Receivce() 循环并每次获取一个消息。我并不期待大量的数据。
    • 定义“更好的东西”,假设有我所指的场景。此外,ReceiveAsync() 可以接收多条消息,但不是全部。
    猜你喜欢
    • 2017-02-13
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多