目前我正在研究是否以及如何使用 MassTransit 来取代 NServiceBus。除了似乎可行的线路兼容性(消息和标头的序列化)之外,我在拓扑(队列和主题的设置)方面遇到了一些困难。
例如,我有一个订单队列,它接收所有类型的订单相关命令,即CreateOrder、CancelOrder。当我尝试配置 MassTransit 时,我能够使用创建的订单队列
builder.Services.AddMassTransit(mt => {
mt.AddConsumer<CreateOrderConsumer>();
mt.UsingAzureServiceBus((context, cfg) => {
cfg.Host("conn-string");
cfg.ReceiveEndpoint("Orders", e => {
e.ConfigureConsumers(context);
});
});
});
但是,这也会创建一个主题 CreateOrder,其中包含单个订阅“Orders”,它将所有消息转发到“Orders”队列。尽管这可行,但拥有一个主题是对现有拓扑的更改,并且拥有一个用于多对一通信的主题(例如发送命令而不是发布事件)对我来说似乎很奇怪。
如何将 MassTransit 配置为仅创建订单队列,而不创建 CreateOrder 主题,并使用 MassTransit 配置发送组件以直接发送到此队列(而不是将其发送到主题)?
e.ConfigureConsumeTopology = false