【问题标题】:MassTransit Send to Existing ExchangeMassTransit 发送到现有交易所
【发布时间】:2019-10-19 01:19:01
【问题描述】:

因此,我将 MassTransit 添加到之前仅使用 RMQ 客户端的现有项目中。

我正在尝试创建一个绑定到现有交换的仅发送总线。但是,当我尝试发送消息时,我收到有关交换类型为“扇出”但现有类型为“主题”的错误,我不确定如何指定它应该是“主题”还是应该根本不要尝试创建交换,而只是使用那里的东西。

拓扑:“导入”(交换)->“导入”(队列)

设置:

    Bus.Factory.CreateUsingRabbitMq(
                    cfg =>
                    {
                        cfg.UseNLog();

                        var host = cfg.Host(serverName, vhost,
                            options =>
                            {
                                options.Username(userName);
                                options.Password(password);
                            });                    
                    });

执行:

    var ep = bus.GetSendEndpoint(new Uri($"rabbitmq://{userName}:{password}@{serverName}/{vhost}/{queue}")).Result;

                    ep.Send<ImportMessage>(CastMessage<ImportMessage>(message),
                        cfg =>
                        {

                            cfg.SetRoutingKey("import");
                        }).Wait();

命令:

    public class ImportMessage 
    {
        public ImportMessage()
        {
            Parameters = new List<KeyValuePair<string, string>>();
        }

        public List<KeyValuePair<string, string>> Parameters { get; set; }
        public string Endpoint { get; set; }

        public Guid Id { get; set; }
        public string Type { get; set; }
        public DateTime Expiration { get; set; }
    }

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    您可以使用以下方法为消息合约配置发布拓扑:

    Bus.Factory.CreateUsingXxx(cfg =>
    {
        cfg.Publish<YourMessageType>(x => x.ExchangeType = ExchangeType.Topic);
    });
    

    然后,当您发布消息时,它将使用该交换类型。您还可以使用消息拓扑更改实体的名称:

    cfg.Message<YourMessageType>(x => x.SetEntityName("your-exchange"));
    

    这将指定类型的交换名称。

    有一个sample表示直接交换支持,客户端的主题交换类似。

    【讨论】:

    • 所以我认为 publish 是针对事件的,而 send 是针对命令的,还是真的不重要?
    • 虽然您是对的,但确实如此。您正在使用具有特定名称的主题交换,这就是您在本例中使用发布来通过 MassTransit 发送消息的原因。从语义上讲,你是对的。以编程方式,您就是这样做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 2018-07-28
    • 2017-04-08
    • 2022-11-07
    相关资源
    最近更新 更多