【问题标题】:How to prevent automatic creation of exchange in rabbitMQ when using consumer in masstransit?在公共交通中使用消费者时如何防止在rabbitMQ中自动创建交换?
【发布时间】:2021-02-24 10:36:32
【问题描述】:

我用 masstransit 创建了一个 receiveEndpoint 并像这样使用它:

var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.ReceiveEndpoint("my-endpoint", x =>
    {
        x.Consumer<MyEndpointConsumer>();
    });
}

这是我的班级 MyEndpointConsumer :

class MyEndpointConsumer : IConsumer<IMyEndpoint>
{
    public Task Consume(ConsumeContext<IMyEndpoint> context)
    {
        Console.WriteLine("MyEndpointConsumer");
    }
}

MassTransit 创建:

  • 一个队列:“我的端点”
  • 第一次交换:“my-endpoint”
  • 第二次交换:“IMyEndpoint”

我想禁用第二次交换的创建。 MassTransit 文档说明消费者拓扑基于“发布拓扑”(MassTransit documentation):

消费拓扑使用发布拓扑来确保消息类型的交换/主题命名一致。

所以我尝试在我的界面“IMyEndpoint”上更改发布拓扑:

cfg.Publish<IMyEndpoint>(x =>
{
    x.Exclude = true;
});

但没什么变化,我试试:

[ExcludeFromTopology]
publiv interface IMyEndpoint

也没有任何变化。

有什么想法来进行这种交流创作吗?

感谢您的帮助。

【问题讨论】:

    标签: c# .net-core rabbitmq masstransit


    【解决方案1】:

    不能排除消费的消息类型。可以排除继承的类型,但不能排除实际使用的消息类型,因为这会阻止已发布的消息到达消费者队列。

    如果您想禁用交换并同时阻止发布的消息到达队列,请在接收端点配置器上设置ConfigureConsumeTopology = false

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 2023-03-15
      • 2017-01-24
      相关资源
      最近更新 更多