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