Может ли кто-нибудь догадаться, в чем может быть проблема, потому что я не знаю, как ее решить. MassTransit создает очереди _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));
Как видите, это сценарий ответа на запрос, в котором запрос отправляется всем потребителям. Но поскольку на данный момент у нас только один потребитель, он отправляется только этому потребителю. Мертвые письма появляются легко, если ответ publishrequest отправляется нескольким потребителям, после того, как потребитель отвечает, другой потребитель не знает, куда отвечать, и генерируется мертвое письмо. Но поскольку у нас здесь один потребитель, мы можем исключить эту возможность.
Так каковы могут быть другие причины этих пропущенных очередей? Огромное спасибо за любую помощь в том, как я могу решить эту проблему ...
Я должен сказать, что в методе Consume в некоторых условиях мы поднимаем RequestTimeoutException
и перехватываем его в запрашивающем приложении. Это проверено, и это не создает пропущенных очередей.
_skipped
- это должен быть либо Mass Transit, либо код пользователя. - person Luke Bakken   schedule 05.09.2018