Запрос всегда получить RequestTimeoutException - PullRequest
0 голосов
/ 05 октября 2018

Я использую ASP.NET Core + Simple Injector и MassTransit v5.1.5.Каждый раз, когда я пытаюсь использовать запрос / ответ, я получаю исключение RequestTimeoutException.

{
            var host = c.Host(new Uri("rabbitmq://localhost/"), h =>
            {
                h.Username("guest");
                h.Password("guest");
            });

            c.ReceiveEndpoint(host, "test_sample_injector", ep =>
            {
                // the prefetch count is important for the performance
                ep.PrefetchCount = 16;

                // ep.LoadFrom requires the service provider which should be build on the top of services
                // and would load all implementations of IConsumer<T> that were added as scoped above
                ep.LoadFrom(container);

                // the endpoint needs to be binded to a class/interface otherwise the messages are going into
                // _skipped queue
                ep.Bind<SampleMessage>();

                EndpointConvention.Map<SampleMessage>(ep.InputAddress);

                ep.Handler<IMessage>(context =>
                {
                    // the handler is called before the consumer
                    return Console.Out.WriteLineAsync($"Received: from handler!");
                });
            });
        };

Это конфигурация RabbitMQ, которую я использую.У меня есть следующая регистрация контейнера для потребителя:

        container.Register<IConsumer<SampleMessage>, SampleMessageConsumer>(Lifestyle.Singleton);

И потребитель выглядит так:

  public class SampleMessageConsumer : IConsumer<SampleMessage>
{
    public async Task Consume(ConsumeContext<SampleMessage> context)
    {
        await context.RespondAsync<DoneSampleMessage>(
            new DoneSampleMessage
            {
                Result = context.Message.Text.ToUpperInvariant()
            });
    }
}

Я звоню:

[HttpGet]
        public async Task<ActionResult<IEnumerable<string>>> Get()
        {
            var r = await _msgSender.Request<SampleMessage, DoneSampleMessage>(
                new SampleMessage() { Text = "[Simple Injector]Hello World!" });


            return new string[] { "value1", "value2" };
        }

Всевызываются обработчики и потребители, но RespondAsync, похоже, не работает.У меня есть MessageSender, где у меня есть метод Request:

 public Task<TResponse> Request<TRequest, TResponse>(TRequest r)
        where TRequest : class
        where TResponse : class
    {
        var client = new MessageRequestClient<TRequest, TResponse>(
            MessageBus,
            _serviceAddress,
            _timeout);

        return client.Request(r);
    }

Я также запустил Шину.

Итак, есть ли идеи, где искать причину этого исключения RequestTimeoutException или, по крайней мере, как это устранить?

...