MassTransit发送到现有交易所

时间:2019-10-18 16:30:44

标签: masstransit

因此,我将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; }
    }

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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