首页 文章

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

提问于
浏览
0

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

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

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

2 回答

  • 1

    转发会将原始队列中的所有消息发送到目标队列 . 如果您查看目的地队列,您将找到带有 ScheduledEnqueueTimeUtc 的消息,但赢得't be able to receive it until the it'的时间将到达 .

  • 0

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

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

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

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

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

    在理论上应该都行得通 .

相关问题