RabbitMQ генерирует пропущенные очереди, которые я хочу игнорировать - PullRequest
0 голосов
/ 04 сентября 2018

Может кто-нибудь догадаться, в чем может быть проблема, потому что я не знаю, как решить эту проблему. RabbitMQ генерирует _skipped очереди, и я понятия не имею, почему он генерирует их. Он генерируется при выполнении ответа на запрос публикации.

Запрос клиента создан с использованием следующего метода в MassTransit.RequestClientExtensions

public static IRequestClient<TRequest, TResponse> CreatePublishRequestClient<TRequest, TResponse>(this IBus bus, TimeSpan timeout, TimeSpan? ttl = null, Action<SendContext<TRequest>> callback = null) where TRequest : class where TResponse : class
{
  return (IRequestClient<TRequest, TResponse>) new PublishRequestClient<TRequest, TResponse>(bus, timeout, ttl, callback);
}

И запрос выполняется следующим образом:

TResponse response = TaskUtil.Await(() => requestClient.Request(request));

Как вы можете видеть, это сценарий ответа на запрос, когда запрос отправляется всем потребителям. Но поскольку на данный момент у нас есть только один потребитель, он отправляется только этому потребителю. Тревожные сообщения появляются легко, если ответ на запрос публикуется нескольким потребителям, как только потребитель отвечает, другой потребитель не знает, где ответить, и генерируется тупик. Но поскольку у нас есть один потребитель, мы можем исключить эту возможность.

Так, что может быть другими причинами для этих пропущенных очередей? Огромное спасибо за любую помощь, как я могу решить эту проблему ...

Я должен сказать, что в методе Consume в некоторых условиях мы поднимаем RequestTimeoutException и перехватываем его в запрашивающем приложении. Это проверено и не создает пропущенных очередей.

1 Ответ

0 голосов
/ 04 сентября 2018

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

Биржи названы по типам сообщений, поэтому будет легко найти устаревшую привязку.

Затем в пользовательском интерфейсе управления вы можете вручную удалить устаревшую привязку, и в пропущенной очереди больше не будет сообщений.

...