我需要一种向未知数量的订阅者发布消息的方法。消息应该是持久的/持久的,并分为三个优先级(高、中和低)。其中一个订阅者只能处理有限的负载,并且一些消息更重要。首先处理高优先级的消息等。
我如何使用 Rebus 做到这一点?我想我需要每个订阅者三个队列?
在哪里可以找到具有持久队列和 MSMQ 的发布/订阅示例?
我需要一种向未知数量的订阅者发布消息的方法。消息应该是持久的/持久的,并分为三个优先级(高、中和低)。其中一个订阅者只能处理有限的负载,并且一些消息更重要。首先处理高优先级的消息等。
我如何使用 Rebus 做到这一点?我想我需要每个订阅者三个队列?
在哪里可以找到具有持久队列和 MSMQ 的发布/订阅示例?
首先,一些信息:Rebus 喜欢使用持久队列、持久消息传递和保证交付。事实上,除非你主动选择退出,否则一切都是如此。因此,如果您设法使 pub/sub 与 Rebus 一起工作,它是持久的 :)
根据定义,发布适用于“未知数量的订阅者”——至少这是总线问题,而不是应用程序问题。
实际上,订阅者通过发出一个SubscriptionMessage
(可以看作是订阅请求)来发起 pub/sub 对话,然后发布者发布一些事件(可以看作是“订阅回复”)。发布者的“总线部分”跟踪谁订阅了任何给定的事件类型。
到现在为止还挺好。
关于优先级,Rebus 没有开箱即用的方法来实现这一点。正如您所建议的,确保某些消息类型的最大延迟的一种方法是创建单独的端点,其输入队列不会被低优先级消息阻塞。
但是有一些关于如何配置 Rebus 的东西强烈建议在每个进程中只有一个输入队列,因此这可能意味着您应该创建订阅这些高优先级消息类型的单独进程。
我知道 MSMQ 支持某种消息优先级,所以我想可以通过MsmqMessageQueue
了解某些标头来支持它(类似于快递和接收时间的实现方式 - 见这里) - 拉取请求很高兴接受并强烈鼓励:)