【发布时间】:2017-09-12 22:11:49
【问题描述】:
我需要使用一个具有多个订阅者的发布者,其中每个订阅者只接收具有该订阅者唯一 ID 的消息。每个订阅者都需要能够响应发布者。
Rebus 有可能以某种方式做到这一点吗?
【问题讨论】:
标签: rebus
我需要使用一个具有多个订阅者的发布者,其中每个订阅者只接收具有该订阅者唯一 ID 的消息。每个订阅者都需要能够响应发布者。
Rebus 有可能以某种方式做到这一点吗?
【问题讨论】:
标签: rebus
您可以通过使用 topic-based routing 使用 Rebus 来做到这一点,遗憾的是目前还没有太多的文档记录。
Rebus 中最突出的 pub/sub API 允许订阅某种类型的消息
await bus.Subscribe<SomeMessage>();
但它在幕后所做的是为主题SomeMessageAssembly.SomeMessage, SomeMessageAssembly(即类型的简单程序集限定名称)建立订阅。
您可以通过bus.Advanced.Routing API 访问主题,因此在您的情况下,您的订阅者只需为他们感兴趣的主题建立适当的订阅,然后发布者会将每个事件发布到适当的主题。
您可以在this sample 中查看基于主题的订阅。但请注意,此示例恰好使用了 RabbitMQ 的一个特殊功能,该功能允许在主题中使用通配符,但目前仅支持 RabbitMQ。
我确实有一个问题要问您:您确定要为此发布/订阅吗?这听起来更像是对我的请求/回复。如果每个“事件”都针对一个特定的接收者,而“发布者”期望得到回复,我会称之为请求/回复并使用显式路由:
var destinationQueue = "queuename_of_specific_recipient";
var request = new SomeRequest { ... };
await bus.Advanced.Routing.Send(destinationQueue, request);
【讨论】: