通常,构建对一系列关键事件做出反应的系统。 无论是生成 Web API、响应数据库更改还是处理事件流或消息,都可以使用Azure Functions来实现这些系统。
在许多情况下,函数与一系列云服务相集成,可提供功能丰富的实现。 以下列表显示了适用于Azure Functions的常见(但绝不详尽)方案。
在文章顶部选择开发语言。
处理文件上传
可以通过多种方式使用函数来将文件处理到 blob 存储容器中或从 blob 存储容器传出。 若要详细了解在 blob 容器上触发的选项,请参阅最佳做法文档中的使用 blob。
例如,在零售解决方案中,合作伙伴系统可以将产品目录信息作为文件提交到 blob 存储中。 上传文件时,可以使用 Blob 触发的函数验证、转换和处理文件到主系统中。
以下教程使用 blob 触发器(基于事件网格)处理 blob 容器中的文件:
例如,将 Blob 触发器与 Blob 容器上的事件订阅结合使用:
[FunctionName("ProcessCatalogData")]
public static async Task Run([BlobTrigger("catalog-uploads/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myCatalogData, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myCatalogData.Length} Bytes");
using (var reader = new StreamReader(myCatalogData))
{
var catalogEntry = await reader.ReadLineAsync();
while(catalogEntry !=null)
{
// Process the catalog entry
// ...
catalogEntry = await reader.ReadLineAsync();
}
}
}
- 快速入门:使用 Azure Functions 响应 Blob 存储事件
- Sample:Blob 触发器与事件网格源类型配合的快速入门示例
- Tutorial(事件):通过事件订阅触发 Azure Functions 于 blob 容器
教程(轮询):使用 Azure Functions 和 Blob Storage 上传和分析文件
- 快速入门:使用 Azure Functions 响应 Blob 存储事件
- Sample:Blob 触发器与事件网格源类型配合的快速入门示例
- Tutorial(事件):通过事件订阅触发 Azure Functions 于 blob 容器
教程(轮询):使用 Azure Functions 和 Blob Storage 上传和分析文件
实时流和事件处理
云应用程序、IoT 设备和网络设备生成并收集大量遥测数据。 Azure Functions可将该数据几乎实时处理为热路径,然后将其存储在 Azure Cosmos DB 中,以便在分析仪表板中使用。
函数还可以使用事件网格等低延迟事件触发器以及 SignalR 等实时输出来准实时地处理数据。
例如,可以使用事件中心触发器从事件中心读取事件,通过输出绑定在取消批处理和转换事件后写入事件中心。
[FunctionName("ProcessorFunction")]
public static async Task Run(
[EventHubTrigger(
"%Input_EH_Name%",
Connection = "InputEventHubConnectionSetting",
ConsumerGroup = "%Input_EH_ConsumerGroup%")] EventData[] inputMessages,
[EventHub(
"%Output_EH_Name%",
Connection = "OutputEventHubConnectionSetting")] IAsyncCollector<SensorDataRecord> outputMessages,
PartitionContext partitionContext,
ILogger log)
{
var debatcher = new Debatcher(log);
var debatchedMessages = await debatcher.Debatch(inputMessages, partitionContext.PartitionId);
var xformer = new Transformer(log);
await xformer.Transform(debatchedMessages, partitionContext.PartitionId, outputMessages);
}
- 大规模流式处理使用 Azure Event Hubs、函数和 Azure SQL
- 使用 Azure Event Hubs、Functions 和 Cosmos DB 进行大规模流处理
- 使用 Kafka 生成者进行大规模流式处理的 Azure Event Hubs,具有 Kafka 触发器的 Functions,以及 Cosmos DB
- 使用 Azure IoT Hub、函数 和 Azure SQL 大规模流式处理
- Azure Functions 的 Azure Event Hubs 触发器
- 适用于 Azure Functions 的 Apache Kafka 触发器
- Azure Functions 的 Azure Event Hubs 触发器
- 适用于 Azure Functions 的 Apache Kafka 触发器
- Azure Functions 的 Azure Event Hubs 触发器
- 适用于 Azure Functions 的 Apache Kafka 触发器
- Azure Functions 的 Azure Event Hubs 触发器
- 适用于 Azure Functions 的 Apache Kafka 触发器
运行计划任务
借助 Functions,可以基于你定义的 cron 计划运行代码。
例如,可以每隔 15 分钟分析一个金融服务客户数据库中的重复条目,以避免向同一客户发送多个通信。
有关示例,请参阅以下代码片段:
[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, ILogger log)
{
if (myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
// Perform the database deduplication
}
生成可缩放的 Web API
HTTP 触发的函数可定义 HTTP 终结点。 这些终结点运行可以直接连接或通过使用绑定扩展连接到其他服务的函数代码。 可以将这些终结点组合到一个基于 Web 的 API 中。
还可以使用 HTTP 触发的函数终结点作为 Webhook 集成,例如GitHub Webhook。 通过这种方式,可以创建处理来自GitHub事件的数据的函数。 有关详细信息,请参阅 使用 webhook 和 Azure Functions 监控 GitHub 事件。
有关示例,请参阅以下代码片段:
[FunctionName("InsertName")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
[CosmosDB(
databaseName: "my-database",
collectionName: "my-container",
ConnectionStringSetting = "CosmosDbConnectionString")]IAsyncCollector<dynamic> documentsOut,
ILogger log)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string name = data?.name;
if (name == null)
{
return new BadRequestObjectResult("Please pass a name in the request body json");
}
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
return new OkResult();
}
构建无服务器工作流
函数通常充当无服务器工作流拓扑中的计算组件,例如逻辑应用工作流。 还可以使用 Durable Functions 扩展创建长时间运行的编排。 有关详细信息,请参阅 Durable Functions 概述。
<tags>基于 Azure Functions 的特定无服务器工作流序列的组合图。</tags>
Quickstart:使用 C# - 培训:使用 Azure Functions、Logic Apps 和 Azure SQL Database 部署无服务器 API
Quickstart:使用 Python - 培训:使用 Azure Functions、Logic Apps 和 Azure SQL Database 部署无服务器 API
响应数据库更改
某些进程需要在存储的数据更改时记录、审核或执行其他作。 函数触发器提供了一种很好的方式来获取数据更改通知以启动此类操作。
请考虑下列示例:
快速入门:使用 Azure Functions 响应 Azure SQL Database 中的数据库更改
创建可靠消息系统
可以将 Functions 与Azure消息传送服务配合使用来创建高级事件驱动的消息传送解决方案。
例如,可以在Azure Storage队列上使用触发器,将一系列函数执行链接在一起。 或者可以使用服务总线队列和触发器来构建一个在线订购系统。
在可靠消息系统中的 Azure Functions 图示。
这些文章演示如何将输出写入存储队列:
这些文章演示如何从Azure Service Bus队列或主题触发。