当前位置: 首页 > 知识库问答 >
问题:

使用放弃的服务总线消息重新触发Azure函数

相弘方
2023-03-14

我有一个服务总线主题,它有40万条消息从一个Azure函数推送到它。我有第二个Azure函数接收消息作为触发器。第2个函数运行时,成功处理了98%的消息。它给我留下了大约8000条失败的消息。由于异常或我的代码,消息被放弃了。我现在有8,000条消息坐在一个主题的订阅者中,我不能让函数重新尝试处理。

订阅服务器最初被设置为只允许1邮件传递。我之所以这么做,是因为在调试时,我看到同一条消息被多次处理。我不确定这是在Visual Studio中进行本地调试的副作用,还是消息会多次发送到函数。我假设这就是导致那些消息在被放弃后函数没有重新运行的原因(如果支持的话?)。

我已经将订阅者传递计数更改为5,希望它能将消息重新传递给函数。它没有。我现在需要做什么来获得剩余的8000条消息来再次触发第2个功能?

最坏的情况是,我可以删除订阅,重新创建订阅并重新运行第一个函数,这应该只是发布与原始丢失的8,000条消息相关联的html" target="_blank">数据(我有逻辑来处理第一个函数中丢失的数据)。这将导致第二个函数重新启动。我想弄清楚当订阅有像这样的孤立消息时如何处理它,我将在升级到生产时体验到这一点。我希望这是自动化的,而不是必须处理手动清理和重新运行的过程第二次。

我用C#Functions1.0在完整的框架上编写了这些函数。

共有1个答案

易修洁
2023-03-14

如果MaxDeliveryCount为reach,则消息将被发送到死信队列。
您可以将订阅视为子队列,以便仍然可以访问这些消息。

查看关于如何访问死信队列的文章:

  • 如何访问Azure订阅上的死信子队列?

首先,您的场景将增加MaxDeliveryCount。

 [FunctionName("my-subscription-failure")]
 public static async Task RunFailure(
        [ServiceBusTrigger("%MytopicName%", "%MySubscription%/$DeadLetterQueue", Connection = "MyconnectionString")] BrokeredMessage message,
        [ServiceBus( "%MytopicName%", AccessRights.Send, Connection = "MyconnectionString")] ICollector<BrokeredMessage> queueBinding,
        TraceWriter log, ExecutionContext context)
{
    // fist check if the message can be resent (it could be a message that can't be replay)
    ...

    // If ok, resent the message
    queueBinding.Add(message);
}
 类似资料:
  • 我正在尝试在Azure中构建一个简单的WebAPI REST服务,后端有一个服务总线队列工作器。我可以从Web API向工作人员发送一条消息。然而,我试图发送更多的信息,只是为了看看一切是如何运作的。因此,我创建了一个简单的控制器,如下所示: 当我呼叫控制器时,我只收到工作人员接收到的大约1/2的消息。其余的似乎都被放弃了。

  • > 在Azure Service Bus主题中,我有两个订阅subscription1和subscription2。我正在向主题发送一条消息。在subscription1中,消息被放弃,在subscription2中,消息被处理。subscription1中的已放弃消息是否将再次发送给两个订阅或仅发送给已放弃消息的订阅。 我也有点困惑,死信队列将是所有订阅都通用的,还是每个订阅都有一个单独的死信队

  • 我正在尝试Azure服务总线队列。我有以下代码: 队列发送: 接收代码: 我看到,每当我打电话放弃时,信息都被写上了死信。我的假设是它应该被激活,并且可以被另一个客户接收。

  • 我目前正在评估使用一个服务总线和azure函数来触发一些需要通过下游api调用来完成的工作。这都是相当标准的,只是我没有很好地处理当下游系统过载和/或返回header到trottle时会发生什么(即每分钟最大调用数/等)。对于队列触发器的强制节流,我们似乎没有任何动态控制。 我知道我们可以手动设置最大并发,但这并不一定解决问题,因为我们无法控制下游系统,需要考虑它随时可能脱机或变慢。 假设消费计划

  • 我已经创建了一个Azure webwork,它将向服务总线队列发送强类型消息,并成功发送。 我想创建另一个webjob,只要servicebus队列中有消息,就会触发该webjob。请在下面找到我正在尝试的代码。出于某种原因,尽管servicebus队列中有消息,但当我在本地运行webjob时,webjob未被触发并出现错误。 错误: 代码: 有谁能帮我解决这个问题吗? 谢谢