gpt4 book ai didi

azure - 使用废弃的服务总线消息重新触发 Azure Function

转载 作者:行者123 更新时间:2023-12-03 01:43:38 25 4
gpt4 key购买 nike

我有一个服务总线主题,其中有 400,000 条消息从 Azure Functions 推送到该主题。我有第二个 Azure 函数,它接收消息作为触发器。当第二个函数运行时,它成功处理了 98% 的消息。它给我留下了大约 8,000 条失败的消息。无论是由于异常,还是由于我的代码,该消息都被放弃了。现在,该主题的订阅者中有 8,000 条消息,但我无法让该函数重新尝试处理。

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

我已将订阅者传递计数更改为 5,希望它将消息重新传递给该函数。事实并非如此。我现在需要做什么才能获取剩余的 8,000 条消息以再次触发第二个功能?

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

下面显示主题中没有任何消息,但它们仍然存在于订阅中。 enter image description here

我在完整框架上编写了 C# Functions 1.0 中的函数。

最佳答案

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

查看这篇文章,了解如何访问死信队列:

第一件事是您的场景将增加 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 - 使用废弃的服务总线消息重新触发 Azure Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49641724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com