Rebus:组合 Pub/Sub 和 Request/Reply 模式
Rebus: Combining Pub/Sub and Request/Reply patterns
我需要使用一个发布者和多个订阅者,其中每个订阅者只接收具有该订阅者唯一 ID 的消息。每个订阅者都需要能够响应发布者。
是否可以用 Rebus 以某种方式做到这一点?
您可以通过使用 topic-based routing 使用 Rebus 做到这一点,不幸的是,目前还没有太多的记录。
Rebus中最突出的pub/subAPI允许订阅某种类型的消息
await bus.Subscribe<SomeMessage>();
但它在幕后所做的是建立对主题 SomeMessageAssembly.SomeMessage, SomeMessageAssembly
的订阅(即该类型的简单程序集限定名称)。
虽然您可以通过 bus.Advanced.Routing
API 访问主题,因此在您的情况下,您的订阅者只需为他们感兴趣的主题建立适当的订阅,然后发布者就会发布每个事件都有一个适当的主题。
您可以在 this sample 中查看基于主题的订阅。请注意,此示例恰好使用了 RabbitMQ 的一项特殊功能,该功能允许在主题中使用通配符,但目前仅 RabbitMQ 支持。
不过我有个问题要问你:你确定要pub/sub吗?这听起来更像是 request/reply 对我来说。如果每个 "event" 都用于一个特定的收件人,并且 "publisher" 需要回复,我会称其为 request/reply 并使用显式路由:
var destinationQueue = "queuename_of_specific_recipient";
var request = new SomeRequest { ... };
await bus.Advanced.Routing.Send(destinationQueue, request);
我需要使用一个发布者和多个订阅者,其中每个订阅者只接收具有该订阅者唯一 ID 的消息。每个订阅者都需要能够响应发布者。
是否可以用 Rebus 以某种方式做到这一点?
您可以通过使用 topic-based routing 使用 Rebus 做到这一点,不幸的是,目前还没有太多的记录。
Rebus中最突出的pub/subAPI允许订阅某种类型的消息
await bus.Subscribe<SomeMessage>();
但它在幕后所做的是建立对主题 SomeMessageAssembly.SomeMessage, SomeMessageAssembly
的订阅(即该类型的简单程序集限定名称)。
虽然您可以通过 bus.Advanced.Routing
API 访问主题,因此在您的情况下,您的订阅者只需为他们感兴趣的主题建立适当的订阅,然后发布者就会发布每个事件都有一个适当的主题。
您可以在 this sample 中查看基于主题的订阅。请注意,此示例恰好使用了 RabbitMQ 的一项特殊功能,该功能允许在主题中使用通配符,但目前仅 RabbitMQ 支持。
不过我有个问题要问你:你确定要pub/sub吗?这听起来更像是 request/reply 对我来说。如果每个 "event" 都用于一个特定的收件人,并且 "publisher" 需要回复,我会称其为 request/reply 并使用显式路由:
var destinationQueue = "queuename_of_specific_recipient";
var request = new SomeRequest { ... };
await bus.Advanced.Routing.Send(destinationQueue, request);