使用Azure Service Bus队列使用ScheduledEnqueueTimeUtc自动转发

时间:2017-01-16 20:39:22

标签: azure azureservicebus azure-servicebus-queues

我在同一名称空间中有2个Azure Service Bus Queues。我正在使用ScheduledEnqueueTimeUtc在其中一个队列(“scheduled-queue”)中放置预定消息,并将我希望立即处理的消息放入另一个队列(“now-queue”)。

我想要做的是设置“预定队列”的自动转发属性,以便在消息到达其ScheduledEnqueueTimeUtc时将消息转发到“now-queue”。队列转发会以这种方式工作吗?或者队列自动转发是否立即发送入队和未入队的消息?

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

2 个答案:

答案 0 :(得分:1)

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

制作一个包含两个订阅的主题。称之为“现在”而另一个“之后”。使用您调用“ScheduledTime”的自定义属性(在“属性”中)发送消息,并设置为希望消息稍后在“预定队列”中显示的所需日期时间(所有这些名称都已组成)

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

创建“稍后”订阅时,将其设置为ForwardTo到“预定队列”并添加带有TrueFilter的规则,并将Action设置为执行“SET sys.ScheduledEnqueueTimeUtc=ScheduledTime; REMOVE ScheduledTime”的SqlRuleAction

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

理论上应该都行得通。

答案 1 :(得分:0)

转发会将原始队列中的所有邮件发送到目标队列。如果您查看目的地队列,您将找到包含ScheduledEnqueueTimeUtc的邮件,但在该邮件到达之前将无法接收该邮件。