Rabbitmq 请求/响应场景中的RequestTimeoutException

Rabbitmq 请求/响应场景中的RequestTimeoutException,rabbitmq,.net-core,masstransit,request-response,Rabbitmq,.net Core,Masstransit,Request Response,尝试使用MassTransit.RabbitMQversion4.0.1.1378-develop、ASP.NET Core 2 Web应用程序和.NET Core 2控制台项目实现请求/响应场景 下面是在我的ASP.NET Core 2.0应用程序中创建总线和请求客户端的代码: var bus = Bus.Factory.CreateUsingRabbitMq(sbc => sbc.Host(new Uri("rabbitmq://localhost"), h =>

尝试使用
MassTransit.RabbitMQ
version
4.0.1.1378-develop
、ASP.NET Core 2 Web应用程序和.NET Core 2控制台项目实现请求/响应场景

下面是在我的ASP.NET Core 2.0应用程序中创建总线和请求客户端的代码:

var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
    sbc.Host(new Uri("rabbitmq://localhost"), h =>
    {
        h.Username("guest");
        h.Password("guest");
    })
);
services.AddSingleton<IPublishEndpoint>(bus);
services.AddSingleton<IBusControl>(bus);
var requestTimeout = TimeSpan.FromSeconds(10);
var address = new Uri("rabbitmq://localhost/myqueue");
services.AddScoped<IRequestClient<SubmitOrder, OrderSubmitResult>>(ctx => new MessageRequestClient<SubmitOrder, OrderSubmitResult>(bus, address, requestTimeout));

处理正常关机。

我构建了一个示例来演示如何正确地执行此操作,包括使用ASP.NET Core 2(Web应用程序和控制台应用程序)


享受吧

您是否在Web应用程序的总线上调用
Start
?很遗憾,控制器中使用的接口现在标记为已弃用。可能应该更新:
private readonly IRequestClient<SubmitOrder, OrderSubmitResult> _client;
public async Task<ActionResult> SendRequest(string id)
{
    var result = await _client.Request(new SubmitOrder());
    ...
}
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    var host = cfg.Host(new Uri("rabbitmq://localhost"), h =>
    {
        h.Username("guest");
        h.Password("guest");
    });
    cfg.ReceiveEndpoint(host, "myqueue", ep =>
    {
        ep.Handler<SubmitOrder>(context => context.RespondAsync(new OrderSubmitResult()));

        // async version
        //ep.Handler<SubmitOrder>(async context =>
        //{
        //  await context.RespondAsync(new OrderSubmitResult());
        //});

        // with a Consumer
        //ep.Consumer<SubmitOrderConsumer>();

        // with a single Consumer
        //ep.Instance(new SubmitOrderConsumer());
    });
});
bus.Start();
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime, IBusControl bus)
{
    applicationLifetime.ApplicationStopping.Register(() => bus.Stop(TimeSpan.FromSeconds(10)));
....