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