90a*_*yss 2 c# azure azureservicebus azure-servicebus-queues azure-functions
我是服务总线的新手,无法解决这个问题.
基本上我正在使用挂在服务总线队列上的Azure功能应用程序.假设从服务总线触发了一个触发器,我从队列中收到一条消息,并且在处理该消息时,我的代码中出现了问题.在这种情况下,我如何确保再次将该消息放回队列中?目前它只是消失在空气中,当我在VS上重新启动我的功能应用程序时,将从队列中获取下一条消息.
理想情况下,只有当我完成所有数据处理并且当我点击myMsg.Success()时,我是否希望将其从队列中删除.
public static async Task RunAsync([ServiceBusTrigger("xx", "yy", AccessRights.Manage)]BrokeredMessage mySbMsg, TraceWriter log)
{
try{ // do something with mySbMsg }
catch{ // put that mySbMsg back in the queue so it doesn't disappear. and throw exception}
}
Run Code Online (Sandbox Code Playgroud)
我正在阅读mySbMsg.Abandon(),但它看起来像将消息放入死信队列中,我不知道如何访问它?如果有更好的错误处理方法?
云队列与内存中队列略有不同,因为它们需要对客户端在收到队列消息后但在处理完消息之前崩溃的可能性很强.
收到队列消息后,该消息将变为"不可见",以便其他客户端无法接收该消息.这使客户端有机会处理它,客户端必须在完成后将其标记为已完成(Azure函数将在您从函数返回时自动执行此操作).这样,如果客户端在处理消息的过程中崩溃(我们在云端,因此对于由于powerloss等而导致的随机机器崩溃是健壮的),服务器将看到没有完成的消息,假设客户端崩溃,最终重新发送消息.
实际上,这意味着如果您收到队列消息并抛出异常(因此我们不将消息标记为已完成),它将在几分钟内不可见,但几分钟后它将再次显示而另一个客户端可以尝试处理它.换句话说,在Azure函数中,队列消息会在异常后自动重试,但在重试之间,消息将在几分钟内不可见.
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |