发送/发布消息时,我不知道如何在Exchange
任务中指定Queue
和GetSendEndpoint())
?
根据MassTransit文档https://masstransit-project.com/usage/producers.html#send,您可以指定交换和队列,如
GetSendEndpoint(new Uri("queue:input-queue"))
但是,我只能做一个或另一个?
是否有另一种指定了交换和队列的发送方式?
我正在Asp.Net Core中执行此操作,因此这是我的配置:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMassTransit();
services.AddSingleton(p => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("rabbitmq://localhost", h =>
{
h.Username("admin");
h.Password("admin");
});
}));
services.AddSingleton<IBus>(p => p.GetRequiredService<IBusControl>());
services.AddSingleton<IHostedService, BusService>();
}
这是发送消息的方式
var endpoint = await _bus.GetSendEndpoint(new Uri(queue:Test.Queue));
await endpoint.Send(new Message()
{
Text = "This is a test message"
});
如您所见,我只能指定队列名称。
如果指定交易所,则仅在经纪人上声明该交易所。该消息将直接发送到交易所。
"exchange:your-exchange-name"
如果指定队列,将声明该队列以及同名交换,并且该交换将绑定到该队列。消息将被传递到同名交易所,这将把它们传递到队列。
"queue:your-queue-name"
如果要使用其他交换名称和队列名称,则可以使用:
"exchange:your-exchange-name?bind=true&queue=your-queue-name"
或者您可以简化,但是两个队列有点令人困惑:
"queue:your-exchange-name&queue=your-queue-name"
在这里Mass Transit : No consumer中阅读克里斯的回应>>
似乎Exchanges are created by MassTransit when publishing messages, based on the message types. Publishing does not create any queues. Queues are where messages are stored for delivery to consumers.