Почему я теряю сообщения при использовании ReceiveAndDelete? - PullRequest
0 голосов
/ 21 ноября 2018
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 голосов
/ 21 ноября 2018

Всякий раз, когда для получения сообщений используется режим получения и удаления, брокер считает все сообщения, отправленные получающему клиенту, установленными при отправке.Это означает, что сообщение считается использованным, как только брокер поместил его в сеть.Если передача сообщения не удалась, сообщение потеряно.

Проверьте срок действия сообщения и другие причины, по которым сообщения могли быть потеряны.

...