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

Azure函数事件中心触发器可靠性

韦棋
2023-03-14

我对Azure函数的EventHubTrigger有点困惑。

我有一个物联网集线器,我正在使用它与eventhub兼容的endpoint来触发一个Azure函数,该函数将处理和存储接收到的数据。

但是,如果我的函数失败(=抛出异常),在函数调用期间正在处理的消息(或消息)将丢失。实际上,我希望Azure函数运行时在稍后再次处理消息。具体来说,我预计会有这种行为,因为EventHubTrigger正在功能应用存储帐户中保留检查点,以便跟踪事件流中必须继续的位置。

EventHubTrigger的文档甚至指出

如果所有函数执行成功且无错误,则将检查点添加到关联的存储帐户

但是,即使我故意在函数中抛出异常,检查点也会更新,消息也不会再次收到。

我对EventHubTriggers文档的理解是否错误,或者EventHubTriggers实现(或其文档)是否错误?

共有2个答案

夏祺然
2023-03-14

快速修复。因为,如果系统停机数小时,重试策略将不起作用。您可以调用进程。GetCurrentProcess()。杀死();在异常处理中。这将阻止检查站向前移动。我已经用基于消费的功能应用程序测试过了。您将不会在日志中看到任何内容,但我添加了电子邮件,以通知出现了问题,并避免数据丢失,我已终止函数实例。希望这有帮助。我会在它和工作流程的其他部分上放一个博客,如果使用logic app的系统出现持续故障,我会在上面停止运行。

羊舌高峰
2023-03-14

这篇文档看起来确实令人困惑。我猜它们是指函数应用程序主机本身的错误,而不是您的代码。函数执行中的异常不会停止处理和检查点过程。

事实上,事件集线器不是为单个消息重试而设计的。处理器分批工作,它可以将整个批标记为已处理(即在其之后创建检查点),也可以重试整个批(例如,如果进程崩溃)。

见本论坛问答。

如果您仍然需要从事件中心重新处理失败的事件(并且错误不会经常发生),您可以自己实现这种机制。例如。

  1. 将输出队列绑定添加到Azure函数。
  2. 在处理代码周围添加try-cat。
  3. 如果抛出异常,将有问题的事件添加到队列中。
  4. 有另一个带有队列触发器的函数来处理这些事件。

请注意,这样做的缺点是您将失去由事件集线器提供的排序保证(因为队列消息的处理将晚于其邻居)。

 类似资料:
  • 如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议

  • 我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此

  • 关于在物联网场景中使用EventHub的Azure功能,我有几个问题。 EventHub有分区。通常来自特定设备的消息会发送到同一个分区。Azure Function的实例如何分布在EventHub分区中?它是基于性能的吗?如果Azure Function的一个实例设法处理来自所有分区的事件,那么这就足够了,否则每个EventHub分区可能会有一个Azure Function的实例? 读取偏移量呢

  • 我正在尝试创建一个从Azure事件中心触发的Java Azure函数。下面是这些代码片段:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs-trigger?tabs=java#example 这是我的代码: 这是我在构建时遇到的错误: 我已经找了几个小时,一页又一页的谷歌搜索都筋

  • 我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关

  • 我们有一个 Azure 设置,其中包含一个 Azure 事件网格主题,并且我们有一个 Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀筛选器订阅该主题。Azure 函数服务设置为基于消耗的资源,应该能够根据需要进行缩放。 每个订阅都设置为在最多4小时内尝试交付10次,然后放弃活动。到目前为止一切顺利,设置大部分时间都按预期工作。 在某些情况下,对于我们未知的情况,事件网格主