问题描述
最初,我认为您可以将主题视为微服务。例如,您可能具有以下主题:
- OrderTopic
- Invoicetopic
当应用程序发布“ {@ 1}”之类的“事件”时,对该事件感兴趣的所有主题都可以订阅该事件。这样看起来像这样:
- OrderTopic
- ProductOrderedEvent
- SomeOtherEvent
- 发票主题
- ProductOrderedEvent
- SomeOtherInvoiceEvent
- 等
但是,当我尝试发布事件(或消息)时,我必须明确命名要将事件发布到的主题。所以我想我对“主题”一词的看法是错误的。
我只是想按上下文对代码进行分组。有关产品的所有内容都应放在ProductOrderedEvent
中,有关订单的所有内容都应放在ProductsTopic
中,等等。
但是我不想在代码中明确命名每个主题。我只想发布一个事件,并且对该事件感兴趣的主题的订阅者都应该能够参加该事件。
是否可以将事件/消息发布到所有主题,而无需明确命名?还是我应该简单地将主题命名为“ MyOrganizationName”,然后将所有订阅者都放在其中?
解决方法
尽管您不能在不命名主题的情况下向主题发送消息,但是您可以拥有一个“包罗万象”的主题,并根据需要订阅topic filters和forward messages to different chained entities。
在您的示例中,您将使用以下设置
CatchAllTopic
|__ OrderSubscription
| |__ OrderTopic
|__ InvoiceSubscription
|__ InvoiceTopic
因此,您的所有应用程序都会向CatchAllTopic
发送消息,每个订阅都在该消息上过滤所需的消息并将其转发到各自的主题。
请阅读 considerations,以在使用自动转发时予以考虑。