MassTransit 发送到现有交易所

MassTransit Send to Existing Exchange

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

我正在尝试创建绑定到现有交换器的仅发送总线。但是,当我尝试发送消息时,我收到有关交换类型为 "fanout" 的错误,但现有类型为 "topic",我不确定如何指定它应该为 [=26] =] 或者它根本不应该尝试创建交换而只是使用那里的东西。

拓扑:'import'(交换)-> 'import'(队列)

设置:

    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; }
    }

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

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

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

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

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

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