在 LINQPad 7 中使用 MassTransit 8 请求时出现 RequestTimeoutException

问题描述 投票:0回答:1

对 MassTransit 还很陌生,在尝试在 LINQPad 脚本中使用 MT8 请求时遇到问题。我在 Docker 中本地启动了一个 RabbitMQ 管理实例,它可与 .NET 控制台应用程序配合使用,但我肯定缺少直接从 LINQPad 7 使用 MT8 的一些要求。

这是我用来演示我的错误的基本示例:

async Task Main()
{
    IServiceCollection services = new ServiceCollection();
    services.AddMassTransit(x =>
    {
        x.AddConsumer(typeof(MyConsumer));

        x.UsingRabbitMq((ctx, cfg) =>
        {
            cfg.Host("localhost", 5672, "/", h =>
            {
                h.Username("guest");
                h.Password("guest");
            });

            cfg.ConfigureEndpoints(ctx);
        });
    }); 
    var serviceProvider = services.BuildServiceProvider();
    
    var bus = serviceProvider.GetService<IBus>();
    var response = await bus.Request<MyRequest, MyResponse>(new MyRequest("Hi there"));
    response.Message.Dump("Response");
}

namespace MyNamespace
{
    public class MyRequest
    {
        public MyRequest() { }

        public MyRequest(string phrase)
        {
            Phrase = phrase;
        }

        public string Phrase { get; set; }
    }

    public class MyResponse
    {
        public MyResponse() { }

        public MyResponse(string phrase)
        {
            Phrase = phrase;
        }

        public string Phrase { get; set; }
    }

    public class MyConsumer : IConsumer<MyRequest>
    {
        public async Task Consume(ConsumeContext<MyRequest> context)
        {
            await context.RespondAsync(new MyResponse($"'{context.Message.Phrase}' to you too!"));
        }
    }
}

我的 RabbitMQ 容器似乎收到了消息(并创建了一个临时交换),但无法将其路由回来...

然后30秒后,抛出异常:

RequestTimeoutException:等待响应超时

使用此方法可以从 LINQPad 正确发送

消息,并且在 .NET 控制台应用程序中设置的使用者可以很好地使用它们。但我无法从 LINQPad 发出请求/响应,这是我的最终目标。 提前致谢:)

.net rabbitmq masstransit linqpad
1个回答
0
投票

甚至更长时间以来我不得不告诉人们他们需要

启动公共汽车

MassTransit 使用托管服务来启动总线,该服务通常由 .NET 内置的底层通用主机调用。

由于您没有使用主机,因此您需要从容器中获取

IBusControl

并启动总线。是的,完成后您还需要停止它。

    

© www.soinside.com 2019 - 2024. All rights reserved.