将 Azure 服务总线队列自动转发与 ScheduledEnqueueTimeUtc 结合使用

Using Azure Service Bus Queue Auto Forward With ScheduledEnqueueTimeUtc

我在同一个命名空间中有 2 个 Azure 服务总线队列。我将使用 ScheduledEnqueueTimeUtc 的计划消息放入其中一个队列 ("scheduled-queue"),并将我希望立即处理的消息放入另一个队列 ("now-queue")。

我想做的是设置 "scheduled-queue" 的自动转发 属性,以便在消息到达其 ScheduledEnqueueTimeUtc 时将消息转发到 "now-queue"。队列转发会那样工作吗?还是队列自动转发会立即发送已入队和未入队的消息?

我无法在任何地方找到任何文档或示例来解释转发如何处理当前 "invisible" 在队列中的消息,因为它们尚未到达入队日期时间。

转发会将所有邮件从您的原始队列发送到目标队列。如果您查看目标队列,您将找到带有 ScheduledEnqueueTimeUtc 的消息,但在它的时间到达之前将无法接收它。

您应该可以通过一个主题和两个订阅来实现。我今天没有时间自己重现,所以如果这不起作用请告诉我:

创建一个有两个订阅的主题。调用一个 "now" 和另一个 "later"。使用您调用 "ScheduledTime" 的自定义 属性(在属性中)发送消息,并将其设置为您希望消息稍后在 "scheduled-queue" 中显示的所需日期时间(所有这些名称都是虚构的)

创建 "now" 订阅时,将其设置为 ForwardTo 到 "now-queue" 并添加一条规则,如果您使用的是 C#,则使用 CreateSubscription(SubscriptionDescription, RuleDescription) 重载,从而设置将过滤器设置为 TrueFilter,并将 Action 设置为 SqlRuleAction,其中表达式“REMOVE ScheduledTime”会抛出计划超时。

创建 "later" 订阅时,将其设置为 ForwardTo 到 "scheduled-queue" 并添加一个带有 TrueFilter 的规则,并将 Action 设置为执行“SET sys.ScheduledEnqueueTimeUtc=ScheduledTime; REMOVE ScheduledTime”的 SqlRuleAction。 =12=]

该规则将在转发之前将您的值复制到目标队列所需的入队时间。

理论上应该都可以。