我还是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进行请求/响应,这是我在这里的最终目标。
提前感谢:)
1条答案
按热度按时间voase2hg1#
哇,我已经很多年没有看到有人使用LINQpad了。
甚至更长的时间,因为我不得不告诉人们他们需要 * 启动公共汽车 *。
MassTransit使用托管服务来启动总线,该服务通常由. NET中内置的基础通用主机调用。
由于您没有使用主机,因此需要从容器中获取
IBusControl
并启动总线。是的,您还需要在完成后停止它。