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

bihw5rsg  于 7个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(69)

我还是MassTransit的新手,在LINQPad脚本中尝试使用MT 8请求时遇到了问题。我在Docker中本地启动了一个RabbitMQ管理示例,它可以与.NET控制台应用程序一起使用,但我肯定错过了直接从LINQPad 7使用MT 8的一些要求。
下面是一个简单的例子来证明我的错误:

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容器似乎接收到了消息(并创建了一个临时交换),但无法将其路由回来。
x1c 0d1x的数据
30秒后,抛出异常:
RequestTimeoutException:等待响应



使用此方法可以从LINQPad正确地发送消息,并且在.NET控制台应用程序中设置的消费者可以很好地消费它们。但是我不能从LINQPad进行请求/响应,这是我在这里的最终目标。
提前感谢:)

voase2hg

voase2hg1#

哇,我已经很多年没有看到有人使用LINQpad了。
甚至更长的时间,因为我不得不告诉人们他们需要 * 启动公共汽车 *。
MassTransit使用托管服务来启动总线,该服务通常由. NET中内置的基础通用主机调用。
由于您没有使用主机,因此需要从容器中获取IBusControl并启动总线。是的,您还需要在完成后停止它。

相关问题