我想使用针对不同消息类型的过滤器创建带有几个订阅的服务总线主题。但是,我需要保证,即使所有订阅过程都脱机了,也至少有一个订阅将接收并成功处理所有发送给主题的消息。
有没有比将每个过滤器自动转发到队列更好的方法,并且有一种方法可以捕获所有过滤订阅者忽略的消息而不捕获所有消息?
编辑:我的动机是提供一种具有优先级的类似队列的机制,而不为每种消息类型/优先级创建队列,或者至少在侦听侧管理多个队列的复杂性。队列通常可以保证消费者。我不想使用发布者必须推送到不同的队列,而是希望使用主题并使用过滤器来管理优先级。
根据我目前对SB的了解,我怀疑在公开使用该主题之前,我只需要确保对某个主题的订阅到位,包括反向捕获所有过滤器订阅。我不知道订阅是否完全可靠。
答案 0 :(得分:2)
但是,我需要保证,即使所有订阅过程都脱机了,也至少要通过一个订阅才能接收并成功处理发送给主题的所有消息。
该语句有问题。那里有主题和订阅,可以实现发布/订阅,并使发布者与订阅者脱钩。经纪人本身不保证会有订户。
虽然主题支持EnableFilteringMessagesBeforePublishing
(TopicDescription.EnableFilteringMessagesBeforePublishing
),但不建议用于生产环境。
更新
根据更新后的问题,一般答案保持不变。主题/订阅用于发布/订阅和去耦。如果要确保订阅者上线后不会丢失任何消息,则需要确保首先创建订阅。
我不知道订阅是否完全可靠。
是的,订阅是可靠的。幕后订阅是一个队列。
如果要根据消息类型将消息路由到不同的处理器,则将该消息发布到主题并具有转发订阅是一种很好的方法。您确实需要牢记quotas(您可以为每个主题创建多少个订阅),但是数量很高。而且,如果达到这一点,则可以通过使给定处理器处理更复杂的SQL filtering rules来减少给定处理器处理多种消息类型时的订阅数量。