【问题标题】:How to bind Endpoint to RoutingKey while using ConfigureConsumer in MassTransit如何在 MassTransit 中使用 ConfigureConsumer 时将 Endpoint 绑定到 RoutingKey
【发布时间】:2019-08-08 13:56:12
【问题描述】:

我正在使用基于 RabbitMQ 的 MassTransit 在我们当前的一个项目中替换 EasyNetQ。

我基本上设置了一个效果很好的消费者 - 但是我想知道如何在使用“ConfigureConsumer”函数时指定生成队列的routingKey,例如:

x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    var host = cfg.Host(new Uri("rabbitmq://localhost"), hostConfigurator =>
                    {
                        hostConfigurator.Username("guest");
                        hostConfigurator.Password("guest");
                    });

                    cfg.ReceiveEndpoint(host, "submit-order", ep =>
                    {
                        ep.ConfigureConsumer<CreatePersonConsumer>(provider);
                    });
                }));

以上示例未设置任何 RoutingKey。 根据文档,我发现指定 routingKey 的唯一选项是使用“绑定”方法手动绑定到 Exchange,如下所示:

cfg.ReceiveEndpoint(host, "priority-orders", x =>
    {
        x.BindMessageExchanges = false;

        x.Consumer<CreatePersonConsumer>();

        x.Bind("submitorder", s => 
        {
            s.RoutingKey = "KEY";
            s.ExchangeType = ExchangeType.Direct;
        });
    });

由于需要使用字符串文字来指定交换名称,这种方法有点困扰我......

我是否错过了仅指定 routingKey 而无需将交换名称直接设置为字符串的任何选项?

【问题讨论】:

    标签: c# .net-core rabbitmq masstransit


    【解决方案1】:

    我刚刚创建了一个示例,展示了如何在 MassTransit 中使用直接交换和路由密钥。

    https://github.com/MassTransit/Sample-Direct

    关键是两个配置,应该在任何接收端点配置之前。

    configurator.Message<ContentReceived>(c => c.SetEntityName("content.received"));
    
    configurator.Publish<ContentReceived>(c => { c.ExchangeType = ExchangeType.Direct; });
    

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2019-09-20
      • 2013-05-28
      相关资源
      最近更新 更多