因此,我将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; }
}
答案 0 :(得分:2)
您可以使用以下方法配置消息合同的发布拓扑:
Bus.Factory.CreateUsingXxx(cfg =>
{
cfg.Publish<YourMessageType>(x => x.ExchangeType = ExchangeType.Topic);
});
然后,当您发布消息时,它将使用该交换类型。您还可以使用消息拓扑更改实体名称:
cfg.Message<YourMessageType>(x => x.SetEntityName("your-exchange"));
这将指定类型的交换名称。
有一个sample显示了直接交换支持,主题交换在客户端类似。