我有一个继承自另一个类的类。这两个类都是事件,我使用MassTransit和RabbitMQ使用它们。示例:
public class EventBase {}
public class CreatedEvent : EventBase {}
public class CreatedEventConsumer : IConsumer<CreatedEvent> {}
public class EventBaseConsumer : : IConsumer<EventBase> {}
到目前为止,当我发布CreatedEvent时,它会在RabbitMQ上创建2个交换,每个事件1个,并绑定它们。因此,发布CreatedEvent将为两个队列(CreatedEventConsumer和EventBaseConsumer)发送消息。
现在我开始在8.0.8版本的MassTransit上使用Transactional Outbox,它不会在交换机之间创建绑定,如果绑定已经存在于RabbitMQ上,那么它可以正常工作,我会在两个队列上接收消息,但是如果绑定不存在,那么它不会创建绑定,我只会在CreatedEventConsumer队列上接收消息。
知道为什么会这样吗?
1条答案
按热度按时间gpnt7bae1#
事务发件箱不知道代理交换拓扑,这意味着对于仅通过事务发件箱发布的消息类型,可能需要将这些类型告知MassTransit,以便可以在总线启动时配置它们。
要在总线启动时(而不是消息发布时)部署拓扑,可以将发布的消息类型添加到总线配置中,并将
DeployPublishTopology
设置为true
,如下所示。这将确保在启动时创建
CreatedEvent
和所有基/继承类型交换。您还可以使用
AddPublishMessageTypes
添加多个消息类型。