本文介绍如何将 Azure 托管 Redis 或 Azure Cache for Redis 与 Azure Functions 配合使用,来创建优化的无服务器体系结构和事件驱动的体系结构。
Azure Functions 提供事件驱动的编程模型,其中触发器和绑定是关键功能。 使用 Azure Functions,可以轻松生成事件驱动的无服务器应用程序。 Azure Redis 服务(Azure 托管 Redis 和 Azure Cache for Redis)提供了一组构建基块和最佳做法,用于生成分布式应用程序,包括微服务、状态管理、发布/订阅消息传送等。
Azure Redis 可用作 Azure Functions 的触发器,以支持启动无服务器工作流。 此功能在数据体系结构(如后写缓存或任何基于事件的体系结构)中非常有用。
可以集成 Azure Redis 和 Azure Functions 来生成函数,以响应来自 Azure Redis 或外部系统的事件。
操作 | 方向 |
---|---|
Redis 发布订阅消息上的触发器 | 触发器 |
Redis 列表上的触发器 | 触发器 |
Redis 流上的触发器 | 触发器 |
读取缓存值 | 输入 |
写入值以缓存 | 输出 |
函数触发器和绑定的可用性范围
层 | Azure Cache for Redis(基本、标准、高级、Enterprise 和 Enterprise Flash)。 | Azure 托管 Redis(内存优化、均衡、计算优化和闪存优化)。 |
---|---|---|
Pub/Sub | 是 | 是 |
列表 | 是 | 是 |
流 | 是 | 是 |
绑定 | 是 | 是 |
安装扩展
Functions 在隔离的 C# 工作进程中运行。 若要了解详细信息,请参阅有关在独立工作进程中运行 C# Azure Functions 的指南。
通过安装此 NuGet 包将该扩展添加到你的项目。
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis
安装捆绑包
若要能够在应用中使用此绑定扩展,请确保项目的根目录中 host.json 文件包含以下 extensionBundle
引用:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.0.0, 5.0.0)"
}
}
在此示例中,version
[4.0.0, 5.0.0)
值指示 Functions 主机使用至少4.0.0
小于但小于5.0.0
的捆绑包版本,其中包括所有可能的 4.x 版本。 此表示法有效地在 v4.x 扩展捆绑包的最新可用次要版本上维护应用。
如果可能,应使用最新的扩展捆绑包主版本,并允许运行时自动维护最新的次要版本。 可以在 扩展捆绑包发布页上查看最新捆绑包的内容。
如果应用要求使用以前的扩展版本,则可能需要改为指定以前的捆绑包版本。 可以查看 捆绑包版本 ,找到包含此扩展版本的捆绑包,该版本可供应用使用。 有关详细信息,请参阅 Azure Functions 扩展捆绑包。 结束区域
更新包
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library-redis</artifactId>
<version>1.0.0</version>
</dependency>
Redis 连接字符串
Azure Redis 触发器和绑定具有一个必需属性,该属性指示包含缓存连接信息的应用程序设置或集合名称。 Redis 触发器或绑定会通过传递给 Connection
参数的名称查找包含连接字符串的环境变量。
在本地开发中,可以使用 Connection
文件定义 。 在部署到 Azure 时,可以使用应用程序设置。
使用 Azure 函数连接到缓存实例时,可以在部署中使用以下类型的连接之一:
用户分配的托管标识必须与函数应用相关联,并且还必须在缓存服务中授予该标识的显式权限。 有关详细信息,请参阅 使用 Microsoft Entra ID 进行缓存身份验证。
这些示例显示了根据客户端身份验证类型连接到每个缓存服务所需的应用设置的密钥名称和值,假定 Connection
绑定中的属性设置为 Redis
。
"Redis__redisHostName": "<cacheName>.<region>.redis.chinacloudapi.cn",
"Redis__principalId": "<principalId>",
"Redis__clientId": "<clientId>"