MassTransit RabbitMq发送消息

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

发送/发布消息时,我不知道如何在Exchange任务中指定QueueGetSendEndpoint())

根据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"
});

如您所见,我只能指定队列名称。

c# rabbitmq masstransit
2个回答
1
投票

如果指定交易所,则仅在经纪人上声明该交易所。该消息将直接发送到交易所。

"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"

0
投票

在这里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.

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