教程:使用 Dapr 绑定的事件驱动型工作
在本教程中,你将创建一个微服务来演示 Dapr 的绑定 API 如何将外部系统用作输入和输出。 你将:
- 在本地运行应用程序。
- 使用提供的 Bicep 通过 Azure Developer CLI 将应用程序部署到 Azure 容器应用。
该服务侦听来自系统 CRON 的输入绑定事件,然后将本地数据的内容输出到 PostreSql 输出绑定。
先决条件
- 安装 Azure Developer CLI
- 安装并初始化 Dapr
- Docker Desktop
- 安装 Git
在本地运行 Node.js 应用程序
在将应用程序部署到 Azure 容器应用之前,首先请使用 Docker Compose 和 Dapr 在本地运行 PostgreSQL 容器和 JavaScript 服务。
准备项目
将示例应用程序克隆到本地计算机。
git clone https://github.com/Azure-Samples/bindings-dapr-nodejs-cron-postgres.git
导航到示例的根目录。
cd bindings-dapr-nodejs-cron-postgres
使用 Dapr CLI 运行应用程序
在示例的根目录中,将目录更改为
db
。cd db
使用 Docker Compose 运行 PostgreSQL 容器。
docker compose up -d
打开新的终端窗口并导航到示例目录中的
/batch
。cd bindings-dapr-nodejs-cron-postgres/batch
安装依赖项。
npm install
运行 JavaScript 服务应用程序。
dapr run --app-id batch-sdk --app-port 5002 --dapr-http-port 3500 --resources-path ../components -- node index.js
dapr run
命令在本地运行绑定应用程序。 应用程序成功运行后,终端窗口会显示输出绑定数据。预期输出
批处理服务侦听来自系统 CRON 的输入绑定事件,然后将本地数据的内容输出到 PostgreSQL 输出绑定。
== APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch
在
./db
终端中,停止 PostgreSQL 容器。docker compose stop
使用 Azure Developer CLI 部署应用程序模板
在本地运行应用程序后,让我们使用 azd
将绑定应用程序部署到 Azure 容器应用。 在部署期间,我们会将本地容器化 PostgreSQL 交换为 Azure PostgreSQL 组件。
准备项目
导航到示例的根目录。
cd bindings-dapr-nodejs-cron-postgres
使用 Azure Developer CLI 进行预配和部署
运行
azd init
以初始化项目。azd init
当终端中出现提示时,请提供以下参数。
参数 说明 环境名称 为保存所有 Azure 资源而创建的资源组的前缀。 Azure 位置 资源的 Azure 位置。 确保选择适用于 Azure PostgreSQL 的位置。 Azure 订阅 资源的 Azure 订阅。 运行
azd up
以预配基础结构,并通过单个命令将应用程序部署到 Azure 容器应用。azd up
此过程可能需要一段时间才能完成。 完成
azd up
命令后,CLI 输出将显示两个用于监视部署进度的 Azure 门户链接。 输出还演示了如何运行azd up
:- 使用
azd provision
通过./infra
目录中提供的 Bicep 文件创建和配置所有必要的 Azure 资源。 Azure Developer CLI 预配这些资源后,你可以通过 Azure 门户访问这些资源。 用于预配 Azure 资源的文件包括:main.parameters.json
main.bicep
- 按功能组织的
app
资源目录 - 一个
core
参考库,其中包含azd
模板使用的 Bicep 模块
- 使用
azd deploy
部署代码
预期输出
Initializing a new project (azd init) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time You can view detailed progress in the Azure Portal: https://portal.azure.cn/#blade/HubsExtension/DeploymentDetailsBlade/overview (✓) Done: Resource group: resource-group-name (✓) Done: Log Analytics workspace: log-analytics-name (✓) Done: Application Insights: app-insights-name (✓) Done: Portal dashboard: dashboard-name (✓) Done: Azure Database for PostgreSQL flexible server: postgres-server (✓) Done: Key vault: key-vault-name (✓) Done: Container Apps Environment: container-apps-env-name (✓) Done: Container App: container-app-name Deploying services (azd deploy) (✓) Done: Deploying service api - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.dev/ SUCCESS: Your Azure app has been deployed! You can view the resources created under the resource group resource-group-name in Azure Portal: https://portal.azure.cn/#@/resource/subscriptions/your-subscription-ID/resourceGroups/your-resource-group/overview
- 使用
确认部署是否成功
在 Azure 门户中,验证批处理容器应用是否会每隔 10 秒将每个插入项记录到 Azure PostgreSQL 中。
复制终端输出中的容器应用名称。
转到 Azure 门户并按名称搜索容器应用资源。
在容器应用仪表板中,选择“监视”>“日志流”。
确认容器记录的输出是否与前面在终端中显示的输出相同。
发生了什么情况?
成功完成 azd up
命令后:
- Azure Developer CLI 已将示例项目的
./infra
目录中引用的 Azure 资源预配到指定的 Azure 订阅。 现在可以通过 Azure 门户查看这些 Azure 资源。 - 部署到 Azure 容器应用的应用。 在门户中,可以浏览功能齐全的应用。
在本地运行 Python 应用程序
准备项目
将示例应用程序克隆到本地计算机。
git clone https://github.com/Azure-Samples/bindings-dapr-python-cron-postgres.git
导航到示例的根目录。
cd bindings-dapr-python-cron-postgres
使用 Dapr CLI 运行应用程序
在将应用程序部署到 Azure 容器应用之前,首先请使用 Docker Compose 和 Dapr 在本地运行 PostgreSQL 容器和 Python 服务。
在示例的根目录中,将目录更改为
db
。cd db
使用 Docker Compose 运行 PostgreSQL 容器。
docker compose up -d
打开新的终端窗口并导航到示例目录中的
/batch
。cd bindings-dapr-python-cron-postgres/batch
安装依赖项。
pip install -r requirements.txt
运行 Python 服务应用程序。
dapr run --app-id batch-sdk --app-port 5001 --dapr-http-port 3500 --resources-path ../components -- python3 app.py
dapr run
命令在本地运行绑定应用程序。 应用程序成功运行后,终端窗口会显示输出绑定数据。预期输出
批处理服务侦听来自系统 CRON 的输入绑定事件,然后将本地数据的内容输出到 PostgreSQL 输出绑定。
== APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch
在
./db
终端中,停止 PostgreSQL 容器。docker compose stop
使用 Azure Developer CLI 部署应用程序模板
在本地运行应用程序后,让我们使用 azd
将绑定应用程序部署到 Azure 容器应用。 在部署期间,我们会将本地容器化 PostgreSQL 交换为 Azure PostgreSQL 组件。
准备项目
导航到示例的根目录。
cd bindings-dapr-python-cron-postgres
使用 Azure Developer CLI 进行预配和部署
运行
azd init
以初始化项目。azd init
当终端中出现提示时,请提供以下参数。
参数 说明 环境名称 为保存所有 Azure 资源而创建的资源组的前缀。 Azure 位置 资源的 Azure 位置。 确保选择适用于 Azure PostgreSQL 的位置。 Azure 订阅 资源的 Azure 订阅。 运行
azd up
以预配基础结构,并通过单个命令将应用程序部署到 Azure 容器应用。azd up
此过程可能需要一段时间才能完成。 完成
azd up
命令后,CLI 输出将显示两个用于监视部署进度的 Azure 门户链接。 输出还演示了如何运行azd up
:- 使用
azd provision
通过./infra
目录中提供的 Bicep 文件创建和配置所有必要的 Azure 资源。 Azure Developer CLI 预配这些资源后,你可以通过 Azure 门户访问这些资源。 用于预配 Azure 资源的文件包括:main.parameters.json
main.bicep
- 按功能组织的
app
资源目录 - 一个
core
参考库,其中包含azd
模板使用的 Bicep 模块
- 使用
azd deploy
部署代码
预期输出
Initializing a new project (azd init) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time You can view detailed progress in the Azure Portal: https://portal.azure.cn/#blade/HubsExtension/DeploymentDetailsBlade/overview (✓) Done: Resource group: resource-group-name (✓) Done: Log Analytics workspace: log-analytics-name (✓) Done: Application Insights: app-insights-name (✓) Done: Portal dashboard: dashboard-name (✓) Done: Azure Database for PostgreSQL flexible server: postgres-server (✓) Done: Key vault: key-vault-name (✓) Done: Container Apps Environment: container-apps-env-name (✓) Done: Container App: container-app-name Deploying services (azd deploy) (✓) Done: Deploying service api - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.dev/ SUCCESS: Your Azure app has been deployed! You can view the resources created under the resource group resource-group-name in Azure Portal: https://portal.azure.cn/#@/resource/subscriptions/your-subscription-ID/resourceGroups/your-resource-group/overview
- 使用
确认部署是否成功
在 Azure 门户中,验证批处理容器应用是否会每隔 10 秒将每个插入项记录到 Azure PostgreSQL 中。
复制终端输出中的容器应用名称。
转到 Azure 门户并按名称搜索容器应用资源。
在容器应用仪表板中,选择“监视”>“日志流”。
确认容器记录的输出是否与前面在终端中显示的输出相同。
发生了什么情况?
成功完成 azd up
命令后:
- Azure Developer CLI 已将示例项目的
./infra
目录中引用的 Azure 资源预配到指定的 Azure 订阅。 现在可以通过 Azure 门户查看这些 Azure 资源。 - 部署到 Azure 容器应用的应用。 在门户中,可以浏览功能齐全的应用。
在本地运行 .NET 应用程序
准备项目
将示例应用程序克隆到本地计算机。
git clone https://github.com/Azure-Samples/bindings-dapr-csharp-cron-postgres.git
导航到示例的根目录。
cd bindings-dapr-csharp-cron-postgres
使用 Dapr CLI 运行应用程序
在将应用程序部署到 Azure 容器应用之前,首先请使用 Docker Compose 和 Dapr 在本地运行 PostgreSQL 容器和 .NET 服务。
在示例的根目录中,将目录更改为
db
。cd db
使用 Docker Compose 运行 PostgreSQL 容器。
docker compose up -d
打开新的终端窗口并导航到示例目录中的
/batch
。cd bindings-dapr-csharp-cron-postgres/batch
安装依赖项。
dotnet build
运行 .NET 服务应用程序。
dapr run --app-id batch-sdk --app-port 7002 --resources-path ../components -- dotnet run
dapr run
命令在本地运行绑定应用程序。 应用程序成功运行后,终端窗口会显示输出绑定数据。预期输出
批处理服务侦听来自系统 CRON 的输入绑定事件,然后将本地数据的内容输出到 PostgreSQL 输出绑定。
== APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch
在
./db
终端中,停止 PostgreSQL 容器。docker compose stop
使用 Azure Developer CLI 部署应用程序模板
在本地运行应用程序后,让我们使用 azd
将绑定应用程序部署到 Azure 容器应用。 在部署期间,我们会将本地容器化 PostgreSQL 交换为 Azure PostgreSQL 组件。
准备项目
导航到示例的根目录。
cd bindings-dapr-csharp-cron-postgres
使用 Azure Developer CLI 进行预配和部署
运行
azd init
以初始化项目。azd init
当终端中出现提示时,请提供以下参数。
参数 说明 环境名称 为保存所有 Azure 资源而创建的资源组的前缀。 Azure 位置 资源的 Azure 位置。 确保选择适用于 Azure PostgreSQL 的位置。 Azure 订阅 资源的 Azure 订阅。 运行
azd up
以预配基础结构,并通过单个命令将应用程序部署到 Azure 容器应用。azd up
此过程可能需要一段时间才能完成。 完成
azd up
命令后,CLI 输出将显示两个用于监视部署进度的 Azure 门户链接。 输出还演示了如何运行azd up
:- 使用
azd provision
通过./infra
目录中提供的 Bicep 文件创建和配置所有必要的 Azure 资源。 Azure Developer CLI 预配这些资源后,你可以通过 Azure 门户访问这些资源。 用于预配 Azure 资源的文件包括:main.parameters.json
main.bicep
- 按功能组织的
app
资源目录 - 一个
core
参考库,其中包含azd
模板使用的 Bicep 模块
- 使用
azd deploy
部署代码
预期输出
Initializing a new project (azd init) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time You can view detailed progress in the Azure Portal: https://portal.azure.cn/#blade/HubsExtension/DeploymentDetailsBlade/overview (✓) Done: Resource group: resource-group-name (✓) Done: Log Analytics workspace: log-analytics-name (✓) Done: Application Insights: app-insights-name (✓) Done: Portal dashboard: dashboard-name (✓) Done: Azure Database for PostgreSQL flexible server: postgres-server (✓) Done: Key vault: key-vault-name (✓) Done: Container Apps Environment: container-apps-env-name (✓) Done: Container App: container-app-name Deploying services (azd deploy) (✓) Done: Deploying service api - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps-dev.cn/ SUCCESS: Your Azure app has been deployed! You can view the resources created under the resource group resource-group-name in Azure Portal: https://portal.azure.cn/#@/resource/subscriptions/your-subscription-ID/resourceGroups/your-resource-group/overview
- 使用
确认部署是否成功
在 Azure 门户中,验证批处理容器应用是否会每隔 10 秒将每个插入项记录到 Azure PostgreSQL 中。
复制终端输出中的容器应用名称。
转到 Azure 门户并按名称搜索容器应用资源。
在容器应用仪表板中,选择“监视”>“日志流”。
确认容器记录的输出是否与前面在终端中显示的输出相同。
发生了什么情况?
成功完成 azd up
命令后:
- Azure Developer CLI 已将示例项目的
./infra
目录中引用的 Azure 资源预配到指定的 Azure 订阅。 现在可以通过 Azure 门户查看这些 Azure 资源。 - 部署到 Azure 容器应用的应用。 在门户中,可以浏览功能齐全的应用。
清理资源
如果你今后不打算继续使用此应用程序,请使用以下命令删除预配的 Azure 资源。
azd down
后续步骤
- 详细了解如何将 Dapr 应用程序部署到 Azure 容器应用。
- 详细了解 Azure Developer CLI 以及如何使应用程序与
azd
兼容。