我有一个 Azure事件中心,我想通过该中心发送各种类型的消息。每个消息应根据其消息类型由单独的Azure函数处理。最好的方法是什么?
实际上,我可以创建一个具有 type 和 payload 属性的JSON容器,并让一个父Azure函数根据其类型将所有消息有效负载分派给另一个功能,但感觉有点黑。
This question基本上是相同的问题-但是回答了如何使用IoT中心和message routing完成。在“事件中心”配置中,我找不到任何设置来配置邮件路由。
还是应该切换到Azure消息队列以获取此功能?
答案 0 :(得分:1)
我将使用Azure流分析将其路由到其他Azure函数。 ASA允许您将事件中心指定为源和多个接收器(其中一个可以是多个Azure功能)。您可以阅读有关通过Azure门户here设置Azure流分析服务的更多信息。您需要将事件中心设置为源(docs)。您还需要设置接收器(docs)。您编写了一些类似于MS SQL的代码,以将消息路由到各个接收器。但是,由于您要为固定数量的计算付费,因此ASA相对于其他服务而言成本很高。
我在下面放了一些伪代码。您必须使用随附的MS文档中的信息,根据您是ASA的配置方式将其换出。
SELECT
*
INTO
[YourOutputAlias]
FROM
[YourInputAlias]
HAVING
[CONDITION]
SELECT
*
INTO
[YourAlternateOutputAlias]
FROM
[YourInputAlias]
HAVING
[CONDITION]
答案 1 :(得分:0)
根据您有关业务需求的其他信息,并假设事件大小<64KB(预览为1MB),以下屏幕片段显示了您的解决方案示例:
以上解决方案的概念基于将一批事件推送到AEG的事件域端点。 EventHub触发功能负责将批处理中的每种事件消息类型映射到域主题,然后再将其发布到AEG。
请注意,使用Azure IoT中心提取事件,可以将AEG直接集成到IoT中心,并且可以以松散耦合的发布/订阅方式分发每个事件消息。除此之外,与基本事件中心(11.16美元)相比,针对此业务需求,可以使用IoT中心的B1规模层(每月10美元)。 IoT中心内置了消息路由机制(有一些限制),但是IoT / AEG集成的最新功能(例如发布设备遥测消息)为无服务器架构提供了良好的支持。
答案 2 :(得分:0)
我最终使用了Azure Durable Functions的“扇出/扇入”模式。
在这种方法中,所有事件都由单个协调器功能处理,该功能实际上是Durable Azure Function(F1)。这会将传入的JSON反序列化为正确的DTO。根据DTO的内容,调用相应的活动功能(F2)对其进行处理。