【问题标题】:How to route Event Hub messages to different Azure functions based on their message type如何根据消息类型将事件中心消息路由到不同的 Azure 函数
【发布时间】:2019-06-29 18:39:25
【问题描述】:

我有一个 Azure 事件中心,我想通过它发送各种类型的消息。每条消息都应由单独的 Azure 函数处理,具体取决于它们的消息类型。实现这一目标的最佳方法是什么?

实际上,我可以创建一些带有 typepayload 属性的 JSON 容器,并让一个父 Azure 函数根据它们的类型将所有消息负载分派给其他功能,但感觉有点hacky。

This question 基本上提出了同样的问题 - 但有人回答了如何使用 IoT 中心和message routing 来完成。在事件中心配置中,我找不到任何配置消息路由的设置。

或者我应该切换到 Azure 消息队列来获得此功能吗?

【问题讨论】:

  • 您能否提供一些有关您的要求的详细信息,例如有多少种消息,消息必须按顺序消费,消息必须实时处理,消息是消息的一部分流管道等
  • @Roman Kiss:每天大约 10.000 条消息(5 种类型的消息)必须从 5 个不同的本地位置发送,它们不需要按顺序或实时处理(但最好在一个不过,这不是一个硬性要求。)

标签: azure azure-functions azure-eventhub


【解决方案1】:

我会使用 Azure 流分析将其路由到不同的 Azure Functions。 ASA 允许您将事件中心指定为源和多个接收器(其中一个可以是多个 Azure Functions)。您可以通过 Azure 门户 here 阅读有关设置 Azure 流分析服务的更多信息。您需要将事件中心设置为您的源 (docs)。您还需要设置接收器 (docs)。您编写一些类似 MS SQL 的代码来将消息路由到各种接收器。但是,ASA 相对于其他服务而言成本较高,因为您要为固定数量的计算付费。

我在下面放了一些伪代码。您必须根据您如何使用随附的 MS 文档中的信息配置您的 ASA 来更换它。

SELECT
    *
INTO
    [YourOutputAlias]
FROM
    [YourInputAlias]
HAVING
    [CONDITION]

SELECT
    *
INTO
    [YourAlternateOutputAlias]
FROM
    [YourInputAlias]
HAVING
    [CONDITION]

【讨论】:

  • 其实我过去使用过流分析,但由于成本问题,我确实将其淘汰了。 SA 占 Azure 账单总额的 80%。价格是每月固定的,每天只需要处理几百条消息。
【解决方案2】:

根据您有关业务需求的其他信息并假设事件大小

上述方案的概念是基于将一批事件推送到AEG的Event Domain Endpoint。 EventHub 触发器函数负责将批处理中的每个事件消息类型映射到域主题,然后再发布到 AEG。

请注意,使用 Azure IoT Hub 来摄取事件,AEG 可以直接集成到 IoT Hub 中,并且可以以松散解耦的 Pub/Sub 方式分发每个事件消息。除此之外,与基本事件中心(11.16 美元)相比,物联网中心的 B1 规模层(每月 10 美元)可以用于此业务需求。 IoT Hub 内置了消息路由机制(有一些限制),但最近 IoT/AEG 集成的一项新功能(例如发布设备遥测消息)在无服务器架构中提供了很好的支持。

【讨论】:

    【解决方案3】:

    我最终使用了Azure Durable Functions,使用了扇出/扇入模式。

    在这种方法中,所有事件都由单个 Orchestrator 函数处理,该函数实际上是 Durable Azure Function (F1)。这会将传入的 JSON 反序列化为正确的 DTO。根据 DTO 的内容,调用相应的活动函数(F2)对其进行处理。

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 2017-12-25
      • 1970-01-01
      • 2021-05-31
      • 2019-08-13
      • 1970-01-01
      • 2017-01-20
      • 2015-10-21
      • 2023-03-23
      相关资源
      最近更新 更多