捕获发送到 Azure 服务总线主题但没有订阅或被过滤掉的消息?

Capture messages sent to Azure Service Bus Topics with no subscriptions or filtered out?

我想创建一个服务总线主题,其中包含几个使用不同消息类型的过滤器的订阅。但是,我需要保证发送到主题的所有消息都将被至少一个订阅接收并成功处理,即使所有订阅进程都离线也是如此。

是否有比自动转发到每个过滤器的队列更好的方法,以及捕获所有过滤订阅者忽略的消息而不捕获所有消息的方法?

编辑:我的动机是提供一种具有优先级的类似队列的机制,而无需为每个消息 type/priority 级别创建队列,或者至少在监听端管理多个队列的复杂性。一个队列一般保证一个消费者。我不想让发布者推送到不同的队列,而是想使用一个主题并使用过滤器来管理优先级。

根据我目前对 SB 的了解,我怀疑我只需要确保在公开主题以供使用之前,订阅已到位,包括反向包罗万象的过滤器订阅。我不知道订阅是否完全可靠。

However I need to guarantee that all messages sent to the Topic will be received and successfully processed by at least one subscription, even if all of the subscribing processes go offline.

该语句有问题。主题和订阅用于实现 pub/sub 并将发布者与订阅者分离。经纪人本身不保证会有订阅者。

虽然主题支持 EnableFilteringMessagesBeforePublishing (TopicDescription.EnableFilteringMessagesBeforePublishing),但 推荐用于生产。

更新

根据更新后的问题,一般答案保持不变。 Topics/subscriptions 用于 pub/sub 和解耦。如果要确保订阅者上线后不会丢失任何消息,则需要确保首先创建订阅。

I don't know whether subscriptions are completely reliable.

是的,订阅是可靠的。幕后订阅是一个队列。

如果您想根据消息类型将消息路由到不同的处理器,将该消息发布到主题并进行转发订阅是一个很好的方法。您确实需要注意 quotas (how many subscriptions per topic you can create), but those are fairly high. And if you get to that point, it's possible to reduce number of subscriptions when a given processor handles multiple message types by having more complex SQL filtering rules.