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条消息,所有剩余消息将被消耗但未被接收。
答案 0 :(得分:0)
每当使用接收删除模式接收消息时,代理将发送给接收客户端的所有消息视为发送时已解决。这意味着一旦代理将其放入网络,该消息即被视为已消耗。如果邮件传输失败,则会丢失该邮件。
检查message expiration以及其他可能导致邮件丢失的原因。