【问题标题】:Under the hood of Send function in masstranssit大众运输中发送功能的底层
【发布时间】:2020-12-07 07:20:23
【问题描述】:

我正在尝试通过 masstransit 向 rabbitMQ 发送命令,而我知道 send 和 publish 之间的区别,定义了直接交换,但在此之后使用 Send 传输该消息我收到“交换名称”收到扇出但当前的错误是直接的。

Send 是否对扇出类型进行交换?

          config.ReceiveEndpoint("test-consumer", consumer =>
            {
                consumer.Lazy = true;
                consumer.Consumer<TestConsumer>();
                consumer.Durable = true;
                consumer.ConfigureConsumeTopology = false;

                consumer.Bind("MyExchange", ex =>
               {

                   ex.ExchangeType = ExchangeType.Direct;
                   ex.RoutingKey = "reza";
               });
                //binding type from test-consumer exchange to test-consumer queue
                // consumer.ExchangeType = "direct";
            });
var endPoint = await bus.GetSendEndpoint(new Uri("exchange:MyExchange"));

         var send3 = rezEndPoint.Send(new Test { Messaged = "sent from myExchange" },h=> { h.SetRoutingKey("reze"); } );

【问题讨论】:

  • 您的 RabbitMQ 交换可能设置不正确。您需要进入您的 RabbitMQ 实例并检查您的交换是否直接设置为“类型”。我相信他们在创建新交易所时默认为扇出,很容易忘记更改它。
  • @jandrew MassTransit 会为您创建交易所,因此只要不是手动创建,图书馆就应该正确配置交易所。
  • @jandrew 如您所见,我的交换配置是在“直接”类型中创建的,但我认为“发送”会在其引擎盖下作为“扇出”发送。我的问题是关于发送命令如何将命令发送到rabbitMQ

标签: .net-core rabbitmq masstransit


【解决方案1】:

由于您在消费者中将交换类型指定为 direct,因此您还需要通过发送端点进行设置:

var endPoint = await bus.GetSendEndpoint(new Uri("exchange:MyExchange?type=direct"));

【讨论】:

  • 谢谢@Chris,MassTransit 文件中没有提到任何地方,至少我没有看到,无论如何在你提到的那个改变之后,例外“交换是直接的,但电流是扇出”没有t 出现,但我的 ** 消息也没有被消费者收到 **
  • 这意味着您的 TestConsumer 不会使用发送到该交换的消息类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2020-10-25
相关资源
最近更新 更多