首页 > 解决方案 > Azure 服务总线 - 将消息添加到处于延迟状态的队列

问题描述

我想知道是否可以将代理消息发送到消息已经处于延迟状态的队列/主题?

我问这个是因为我目前有一个执行以下操作的过程......

  1. 该过程开始并将代理消息发送到队列(这会触发一个函数,该函数将消息主体作为一个实体记录在表存储中,并具有“处理”状态)。
  2. 在此过程中完成了额外的工作
  3. 如果我们在没有任何问题的情况下完成该过程,则会将另一条代理消息与完成消息一起发送到队列(这会触发将表存储中的实体更新为“完成”状态的相同功能)。

虽然这种方法主要是有效的,但它感觉笨重和脆弱。我真的希望能够向队列发送消息,然后在最后一步使消息在队列中可见,以便函数可以使用它(持久函数)。

我考虑过设置ScheduledEnqueueTimeUtc,但我不能保证该过程何时完成(我在这里考虑最坏的情况)所以我不确定设置它多长时间。

我还查看了Defera 的选项,BrokeredMessage但似乎只能从接收器设置,并且最初不能处于延迟状态。

我正在尝试对服务总线代理消息做些什么?我可以将预定的入队时间设置得这么长(例如 2 小时),如果达到那个时间,它会自动过期并移至死信队列吗?我是否应该将初始消息发送到死信队列,然后在该过程完成后检索它并重新提交?

有没有人有任何实现这样的过程的经验......发送一个开始消息并且只有在收到完成通知后才处理该消息?我需要它尽可能稳健,因为我在这个过程中处理金融交易。

希望我的解释是有道理的。

标签: azureazureservicebusazure-servicebus-queuesbrokeredmessage

解决方案


我最终通过保留发送两条消息的过程解决了这个问题,但重构了我的持久函数以将消息记录Table StorageAzure Queue Storage. 第二个函数监听启动其进程的队列。

经过大量测试,这似乎是一个非常强大的解决方案。然后,这两条消息以什么顺序到达,或者它们需要多长时间都无关紧要……只要它们都到达,那就是第二个函数将启动的时间。


推荐阅读