首页 > 解决方案 > 捕获发送到 Azure 服务总线主题但没有订阅或过滤掉的消息?

问题描述

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

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

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

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

标签: azureazureservicebusazure-servicebus-topics

解决方案


但是,我需要保证发送到该主题的所有消息都将被至少一个订阅接收并成功处理,即使所有订阅进程都脱机。

那个说法有问题。主题和订阅用于实现发布/订阅并将发布者与订阅者分离。经纪人本身不保证会有订阅者。

虽然主题支持EnableFilteringMessagesBeforePublishing( TopicDescription.EnableFilteringMessagesBeforePublishing),但建议将其用于生产用途。

更新

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

我不知道订阅是否完全可靠。

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

如果您想根据消息类型将消息路由到不同的处理器,则将该消息发布到主题并进行转发订阅是一个好方法。您确实需要注意配额(每个主题可以创建多少订阅),但这些配额相当高。如果达到了这一点,当给定的处理器通过更复杂的SQL 过滤规则处理多种消息类型时,就有可能减少订阅数量。


推荐阅读