Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用放弃的服务总线消息重新触发Azure功能_Azure_Azure Functions_Azureservicebus_Azure Servicebus Topics - Fatal编程技术网

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

使用放弃的服务总线消息重新触发Azure功能,azure,azure-functions,azureservicebus,azure-servicebus-topics,Azure,Azure Functions,Azureservicebus,Azure Servicebus Topics,我有一个服务总线主题,它有400000条来自Azure函数的消息。我有第二个Azure函数,它接收消息作为触发器。当第二个函数运行时,它成功地处理了98%的消息。它给我留下了大约8000条失败的消息。无论是来自异常还是来自我的代码,该消息都已被放弃。我现在在该主题的订阅服务器中有8000条消息,我无法获得重新尝试处理的函数 订户最初设置为只允许1次传递消息。我这样做是因为我看到同一条消息在调试时被多次处理。我不确定这是否是VisualStudio本地调试的副作用,或者消息是否会多次发送到函数。我

我有一个服务总线主题,它有400000条来自Azure函数的消息。我有第二个Azure函数,它接收消息作为触发器。当第二个函数运行时,它成功地处理了98%的消息。它给我留下了大约8000条失败的消息。无论是来自异常还是来自我的代码,该消息都已被放弃。我现在在该主题的订阅服务器中有8000条消息,我无法获得重新尝试处理的函数

订户最初设置为只允许1次传递消息。我这样做是因为我看到同一条消息在调试时被多次处理。我不确定这是否是VisualStudio本地调试的副作用,或者消息是否会多次发送到函数。我假设这就是导致这些消息在被放弃后没有重新运行函数的原因(如果支持的话?)

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

最糟糕的情况是,我可以删除订阅,重新创建订阅,然后重新运行第一个函数,它应该只发布与原始缺失8000条消息相关的数据(我有逻辑来处理第一个函数中缺失的数据)。这将导致第二个功能重新启动。我想弄清楚当订阅包含这样的孤立消息时如何处理它,因为我将在升级到生产时体验到这一点。我希望这是自动化的,而不必处理手动清理和重新运行的过程第二次

以下内容显示主题中没有任何消息,但它们仍然存在于订阅中。


我在完整框架上用C#Functions 1.0编写了这些函数。

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

查看此帖子,了解如何访问死信队列:

首先,您的场景将增加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);
}
[FunctionName(“我的订阅失败”)]
公共静态异步任务运行失败(
[ServiceBusTrigger(“%MytopicName%”,“%MySubscription%/$DeadLetterQueue”,Connection=“MyconnectionString”)]代理消息消息,
[ServiceBus(“%MytopicName%”,AccessRights.Send,Connection=“MyconnectionString”)]ICollector queueBinding,
TraceWriter日志,ExecutionContext(上下文)
{
//首先检查邮件是否可以重新发送(可能是无法重播的邮件)
...
//如果确定,请重新发送消息
queueBinding.Add(消息);
}

您可以从死信或毒药队列中获取消息。因此我无法让原始服务总线触发的Azure功能再次运行?我必须编写一个实用程序应用程序才能获取这些消息?在你的azure仪表板上,你能在死信或毒药队列中看到这些消息吗?如果是,您可以获得消息否,则主题下的所有消息计数均为0。订阅有8000条消息,但主题为空。我用主题的屏幕截图更新了我的OP以供参考。