为什么在使用ReceiveAndDelete时丢失消息?

时间:2018-11-21 14:47:07

标签: c# azure azureservicebus

yield return new ServiceInstanceListener(context => new ServiceBusQueueCommunicationListener(
                      new Handler(logAction, context)
                          , context
                          , serviceBusReceiveConnectionString: Config.connectionString
                          , serviceBusQueueName: Config.QueueName
                          , requireSessions: true)
        {

            MaxConcurrentSessions = 1000,
            ReceiveMode = ReceiveMode.ReceiveAndDelete,
            LogAction = logAction,               
            MessagePrefetchCount = 10
        }, "StatelessService-ServiceBusQueueListener");

丢失消息的关键值是“ MessagePrefetchCount”: 我在队列中有100条消息,当此代码运行时,它将消耗掉所有消息,但我只会收到10条消息。 如果我将“ MessagePrefetchCount”更改为50,则我将仅接收2条消息,所有剩余消息将被消耗但未被接收。

1 个答案:

答案 0 :(得分:0)

每当使用接收删除模式接收消息时,代理将发送给接收客户端的所有消息视为发送时已解决。这意味着一旦代理将其放入网络,该消息即被视为已消耗。如果邮件传输失败,则会丢失该邮件。

检查message expiration以及其他可能导致邮件丢失的原因。