对 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 发出请求/响应,这是我的最终目标。
提前致谢 :)