快速入门:输入 & 输出绑定

开始使用 Dapr 的绑定构建块

让我们来看看Dapr的Bindings构建块。 使用绑定,你可以:

  • 使用来自外部系统的事件触发你的应用;
  • 与外部系统进行接口交互。

在本快速入门中,你将使用输入计划每 10 秒运行一次批处理脚本 Cron 捆绑。 该脚本处理 JSON 文件,并使用 PostgreSQL Dapr 绑定输出数据到 SQL 数据库。

绑定 - 图1

在继续快速入门之前,请选择您首选的特定语言 Dapr SDK。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

  1. git clone https://github.com/dapr/quickstarts.git

第 2 步:在本地运行 PostgreSQL Docker 容器

在您的机器上,通过在 Docker 容器中本地运行PostgreSQL 实例。 快速入门示例包括一个 Docker Compose 文件,用于在本地自定义、生成、运行和初始化 postgres 容器具有默认值的 orders 表。

在终端窗口中,从Quickstarts克隆目录的根目录导航到bindings/db目录。

  1. cd bindings/db

运行以下命令以设置容器:

  1. docker compose up

验证容器是否正在本地运行。

  1. docker ps

输出应包括:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 55305d1d378b postgres "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp sql_db

第 3 步:预定一个 Cron 任务并写入数据库

在一个新的终端窗口中,导航到 SDK 目录。

  1. cd bindings/python/sdk/batch

安装依赖项:

  1. pip3 install -r requirements.txt

与 Dapr sidecar 一起运行 batch-sdk 服务。

  1. dapr run --app-id batch-sdk --app-port 50051 --resources-path ../../../components -- python3 app.py

注意:由于Python3.exe在Windows中未定义,您可能需要使用python app.py而不是python3 app.py

process_batch 函数内的代码每 10 秒执行一次(定义在 binding-cron.yaml 文件中的 components 目录)。 绑定触发器通过 Dapr sidecar 在您的应用程序中寻找 HTTP POST 的路由。

  1. # Triggered by Dapr input binding
  2. @app.route('/' + cron_binding_name, methods=['POST'])
  3. def process_batch():

batch-sdk服务使用在binding-postgresql.yaml组件中定义的PostgreSQL输出绑定,将OrderIdCustomerPrice记录插入orders表中。

  1. with DaprClient() as d:
  2. sqlCmd = ('insert into orders (orderid, customer, price) values ' +
  3. '(%s, \'%s\', %s)' % (order_line['orderid'],
  4. order_line['customer'],
  5. order_line['price']))
  6. payload = {'sql': sqlCmd}
  7. print(sqlCmd, flush=True)
  8. try:
  9. # Insert order using Dapr output binding via HTTP Post
  10. resp = d.invoke_binding(binding_name=sql_binding, operation='exec',
  11. binding_metadata=payload, data='')
  12. return resp
  13. except Exception as e:
  14. print(e, flush=True)
  15. raise SystemExit(e)

第 4 步:查看任务输出

请注意,如上所述,代码将使用 OrderIdCustomerPrice 作为有效载荷来调用输出绑定。

您的输出绑定的print语句输出:

  1. == APP == Processing batch..
  2. == APP == insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32)
  3. == APP == insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4)
  4. == APP == insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56)
  5. == APP == Finished processing batch

在一个新的终端中,验证相同的数据是否已插入到数据库中。 进入bindings/db目录。

  1. cd bindings/db

运行以下命令启动交互式 psql CLI:

  1. docker exec -i -t postgres psql --username postgres -p 5432 -h localhost --no-password

admin=#提示符下,切换到orders表:

  1. \c orders;

orders=# 提示下,选择所有行:

  1. select * from orders;

输出显示应该如下方所示:

  1. orderid | customer | price
  2. ---------+------------+--------
  3. 1 | John Smith | 100.32
  4. 2 | Jane Bond | 15.4
  5. 3 | Tony James | 35.56

components\binding-cron.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

本快速入门包含的 Cron binding-cron.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: cron
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.cron
  8. version: v1
  9. metadata:
  10. - name: schedule
  11. value: "@every 10s" # valid cron schedule
  12. - name: direction
  13. value: "input" # direction of the cron binding

注意:binding-cron.yamlmetadata部分包含一个Cron表达式,用于指定绑定被调用的频率。

component\binding-postgresql.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

  • 启动PostgreSQL 绑定构建块
  • 使用在binding-postgresql.yaml文件中指定的设置连接到PostgreSQL

使用 binding-postgresql.yaml 组件,您可以轻松更换后端数据库 binding 而无需更改代码。

本快速入门包含的 PostgreSQL binding-postgresql.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: sqldb
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.postgresql
  8. version: v1
  9. metadata:
  10. - name: url # Required
  11. value: "user=postgres password=docker host=localhost port=5432 dbname=orders pool_min_conns=1 pool_max_conns=10"
  12. - name: direction
  13. value: "output" # direction of the postgresql binding

在 YAML 文件中:

  • spec/type指定了此绑定所使用的PostgreSQL。
  • spec/metadata定义了组件使用的PostgreSQL实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

  1. git clone https://github.com/dapr/quickstarts.git

第 2 步:在本地运行 PostgreSQL Docker 容器

在您的机器上,通过在 Docker 容器中本地运行PostgreSQL 实例。 快速入门示例包括一个 Docker Compose 文件,用于在本地自定义、生成、运行和初始化 postgres 容器具有默认值的 orders 表。

在终端窗口中,从Quickstarts克隆目录的根目录导航到bindings/db目录。

  1. cd bindings/db

运行以下命令以设置容器:

  1. docker compose up

验证容器是否正在本地运行。

  1. docker ps

输出应包括:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 55305d1d378b postgres "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp sql_db

第 3 步:预定一个 Cron 任务并写入数据库

在一个新的终端窗口中,导航到 SDK 目录。

  1. cd bindings/javascript/sdk/batch

安装依赖项:

  1. npm install

与 Dapr sidecar 一起运行 batch-sdk 服务。

  1. dapr run --app-id batch-sdk --app-port 5002 --dapr-http-port 3500 --resources-path ../../../components -- node index.js

process_batch 函数内的代码每 10 秒执行一次(定义在 binding-cron.yaml 文件中的 components 目录)。 绑定触发器通过 Dapr sidecar 在您的应用程序中寻找 HTTP POST 的路由。

  1. async function start() {
  2. await server.binding.receive(cronBindingName,processBatch);
  3. await server.start();
  4. }

batch-sdk服务使用在binding-postgresql.yaml组件中定义的PostgreSQL输出绑定,将OrderIdCustomerPrice记录插入orders表。

  1. async function processBatch(){
  2. const loc = '../../orders.json';
  3. fs.readFile(loc, 'utf8', (err, data) => {
  4. const orders = JSON.parse(data).orders;
  5. orders.forEach(order => {
  6. let sqlCmd = `insert into orders (orderid, customer, price) values (${order.orderid}, '${order.customer}', ${order.price});`;
  7. let payload = `{ "sql": "${sqlCmd}" } `;
  8. console.log(payload);
  9. client.binding.send(postgresBindingName, "exec", "", JSON.parse(payload));
  10. });
  11. console.log('Finished processing batch');
  12. });
  13. return 0;
  14. }

第 4 步:查看任务输出

请注意,如上所述,代码将使用 OrderIdCustomerPrice 作为有效载荷来调用输出绑定。

您的输出绑定的print语句输出:

  1. == APP == Processing batch..
  2. == APP == insert into orders (orderid, customer, price) values(1, 'John Smith', 100.32)
  3. == APP == insert into orders (orderid, customer, price) values(2, 'Jane Bond', 15.4)
  4. == APP == insert into orders (orderid, customer, price) values(3, 'Tony James', 35.56)

在一个新的终端中,验证相同的数据是否已插入到数据库中。 进入bindings/db目录。

  1. cd bindings/db

运行以下命令启动交互式 Postgres CLI:

  1. docker exec -i -t postgres psql --username postgres -p 5432 -h localhost --no-password

admin=#提示符下,切换到orders表:

  1. \c orders;

orders=# 提示下,选择所有行:

  1. select * from orders;

输出显示应该如下方所示:

  1. orderid | customer | price
  2. ---------+------------+--------
  3. 1 | John Smith | 100.32
  4. 2 | Jane Bond | 15.4
  5. 3 | Tony James | 35.56

components\binding-cron.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

本快速入门包含的 Cron binding-cron.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: cron
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.cron
  8. version: v1
  9. metadata:
  10. - name: schedule
  11. value: "@every 10s" # valid cron schedule
  12. - name: direction
  13. value: "input" # direction of the cron binding

注意:binding-cron.yamlmetadata部分包含一个Cron表达式,用于指定绑定被调用的频率。

component\binding-postgresql.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

  • 启动PostgreSQL 绑定构建块
  • 使用在binding-postgresql.yaml文件中指定的设置连接到PostgreSQL

使用 binding-postgresql.yaml 组件,您可以轻松更换后端数据库 binding 而无需更改代码。

本快速入门包含的 PostgreSQL binding-postgresql.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: sqldb
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.postgresql
  8. version: v1
  9. metadata:
  10. - name: url # Required
  11. value: "user=postgres password=docker host=localhost port=5432 dbname=orders pool_min_conns=1 pool_max_conns=10"
  12. - name: direction
  13. value: "output" # direction of the postgresql binding

在 YAML 文件中:

  • spec/type指定了此绑定所使用的PostgreSQL。
  • spec/metadata定义了组件使用的PostgreSQL实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

  1. git clone https://github.com/dapr/quickstarts.git

第 2 步:在本地运行 PostgreSQL Docker 容器

在您的机器上,通过在 Docker 容器中本地运行PostgreSQL 实例。 快速入门示例包括一个 Docker Compose 文件,用于在本地自定义、生成、运行和初始化 postgres 容器具有默认值的 orders 表。

在终端窗口中,从Quickstarts克隆目录的根目录导航到bindings/db目录。

  1. cd bindings/db

运行以下命令以设置容器:

  1. docker compose up

验证容器是否正在本地运行。

  1. docker ps

输出应包括:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 55305d1d378b postgres "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp sql_db

第 3 步:预定一个 Cron 任务并写入数据库

在一个新的终端窗口中,导航到 SDK 目录。

  1. cd bindings/csharp/sdk/batch

安装依赖项:

  1. dotnet restore
  2. dotnet build batch.csproj

与 Dapr sidecar 一起运行 batch-sdk 服务。

  1. dapr run --app-id batch-sdk --app-port 7002 --resources-path ../../../components -- dotnet run

process_batch 函数内的代码每 10 秒执行一次(定义在 binding-cron.yaml 文件中的 components 目录)。 绑定触发器通过 Dapr sidecar 在您的应用程序中寻找 HTTP POST 的路由。

  1. app.MapPost("/" + cronBindingName, async () => {
  2. // ...
  3. });

batch-sdk服务使用在binding-postgresql.yaml组件中定义的PostgreSQL输出绑定,将OrderIdCustomerPrice记录插入orders表中。

  1. // ...
  2. string jsonFile = File.ReadAllText("../../../orders.json");
  3. var ordersArray = JsonSerializer.Deserialize<Orders>(jsonFile);
  4. using var client = new DaprClientBuilder().Build();
  5. foreach(Order ord in ordersArray?.orders ?? new Order[] {}){
  6. var sqlText = $"insert into orders (orderid, customer, price) values ({ord.OrderId}, '{ord.Customer}', {ord.Price});";
  7. var command = new Dictionary<string,string>(){
  8. {"sql",
  9. sqlText}
  10. };
  11. // ...
  12. }
  13. // Insert order using Dapr output binding via Dapr Client SDK
  14. await client.InvokeBindingAsync(bindingName: sqlBindingName, operation: "exec", data: "", metadata: command);

第 4 步:查看任务输出

请注意,如上所述,代码将使用 OrderIdCustomerPrice 作为有效载荷来调用输出绑定。

您的输出绑定的print语句输出:

  1. == APP == Processing batch..
  2. == APP == insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);
  3. == APP == insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);
  4. == APP == insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);
  5. == APP == Finished processing batch

在一个新的终端中,验证相同的数据是否已插入到数据库中。 进入bindings/db目录。

  1. cd bindings/db

运行以下命令启动交互式 Postgres CLI:

  1. docker exec -i -t postgres psql --username postgres -p 5432 -h localhost --no-password

admin=#提示符下,切换到orders表:

  1. \c orders;

orders=# 提示下,选择所有行:

  1. select * from orders;

输出显示应该如下方所示:

  1. orderid | customer | price
  2. ---------+------------+--------
  3. 1 | John Smith | 100.32
  4. 2 | Jane Bond | 15.4
  5. 3 | Tony James | 35.56

components\binding-cron.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

本快速入门包含的 Cron binding-cron.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: cron
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.cron
  8. version: v1
  9. metadata:
  10. - name: schedule
  11. value: "@every 10s" # valid cron schedule
  12. - name: direction
  13. value: "input" # direction of the cron binding

注意:binding-cron.yamlmetadata部分包含一个Cron表达式,用于指定绑定被调用的频率。

component\binding-postgresql.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

  • 启动PostgreSQL 绑定构建块
  • 使用在binding-postgresql.yaml文件中指定的设置连接到PostgreSQL

使用 binding-postgresql.yaml 组件,您可以轻松更换后端数据库 binding 而无需更改代码。

本快速入门包含的 PostgreSQL binding-postgresql.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: sqldb
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.postgresql
  8. version: v1
  9. metadata:
  10. - name: url # Required
  11. value: "user=postgres password=docker host=localhost port=5432 dbname=orders pool_min_conns=1 pool_max_conns=10"
  12. - name: direction
  13. value: "output" # direction of the postgresql binding

在 YAML 文件中:

  • spec/type指定了此绑定所使用的PostgreSQL。
  • spec/metadata定义了组件使用的PostgreSQL实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

  1. git clone https://github.com/dapr/quickstarts.git

第 2 步:在本地运行 PostgreSQL Docker 容器

在您的机器上,通过在 Docker 容器中本地运行PostgreSQL 实例。 快速入门示例包括一个 Docker Compose 文件,用于在本地自定义、生成、运行和初始化 postgres 容器具有默认值的 orders 表。

在终端窗口中,从Quickstarts克隆目录的根目录导航到bindings/db目录。

  1. cd bindings/db

运行以下命令以设置容器:

  1. docker compose up

验证容器是否正在本地运行。

  1. docker ps

输出应包括:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 55305d1d378b postgres "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp sql_db

第 3 步:预定一个 Cron 任务并写入数据库

在一个新的终端窗口中,导航到 SDK 目录。

  1. cd bindings/java/sdk/batch

安装依赖项:

  1. mvn clean install

与 Dapr sidecar 一起运行 batch-sdk 服务。

  1. dapr run --app-id batch-sdk --app-port 8080 --resources-path ../../../components -- java -jar target/BatchProcessingService-0.0.1-SNAPSHOT.jar

process_batch 函数内的代码每 10 秒执行一次(定义在 binding-cron.yaml 文件中的 components 目录)。 绑定触发器通过 Dapr sidecar 在您的应用程序中寻找 HTTP POST 的路由。

  1. @PostMapping(path = cronBindingPath, consumes = MediaType.ALL_VALUE)
  2. public ResponseEntity<String> processBatch() throws IOException, Exception

batch-sdk服务使用在binding-postgresql.yaml组件中定义的PostgreSQL输出绑定,将OrderIdCustomerPrice记录插入orders表中。

  1. try (DaprClient client = new DaprClientBuilder().build()) {
  2. for (Order order : ordList.orders) {
  3. String sqlText = String.format(
  4. "insert into orders (orderid, customer, price) " +
  5. "values (%s, '%s', %s);",
  6. order.orderid, order.customer, order.price);
  7. logger.info(sqlText);
  8. Map<String, String> metadata = new HashMap<String, String>();
  9. metadata.put("sql", sqlText);
  10. // Invoke sql output binding using Dapr SDK
  11. client.invokeBinding(sqlBindingName, "exec", null, metadata).block();
  12. }
  13. logger.info("Finished processing batch");
  14. return ResponseEntity.ok("Finished processing batch");
  15. }

第 4 步:查看任务输出

请注意,如上所述,代码将使用 OrderIdCustomerPrice 作为有效载荷来调用输出绑定。

您的输出绑定的print语句输出:

  1. == APP == 2022-06-22 16:39:17.012 INFO 35772 --- [nio-8080-exec-4] c.s.c.BatchProcessingServiceController : Processing batch..
  2. == APP == 2022-06-22 16:39:17.268 INFO 35772 --- [nio-8080-exec-4] c.s.c.BatchProcessingServiceController : insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);
  3. == APP == 2022-06-22 16:39:17.838 INFO 35772 --- [nio-8080-exec-4] c.s.c.BatchProcessingServiceController : insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);
  4. == APP == 2022-06-22 16:39:17.844 INFO 35772 --- [nio-8080-exec-4] c.s.c.BatchProcessingServiceController : insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);
  5. == APP == 2022-06-22 16:39:17.848 INFO 35772 --- [nio-8080-exec-4] c.s.c.BatchProcessingServiceController : Finished processing batch

在一个新的终端中,验证相同的数据是否已插入到数据库中。 进入bindings/db目录。

  1. cd bindings/db

运行以下命令启动交互式 Postgres CLI:

  1. docker exec -i -t postgres psql --username postgres -p 5432 -h localhost --no-password

admin=#提示符下,切换到orders表:

  1. \c orders;

orders=# 提示下,选择所有行:

  1. select * from orders;

输出显示应该如下方所示:

  1. orderid | customer | price
  2. ---------+------------+--------
  3. 1 | John Smith | 100.32
  4. 2 | Jane Bond | 15.4
  5. 3 | Tony James | 35.56

components\binding-cron.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

本快速入门包含的 Cron binding-cron.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: cron
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.cron
  8. version: v1
  9. metadata:
  10. - name: schedule
  11. value: "@every 10s" # valid cron schedule
  12. - name: direction
  13. value: "input" # direction of the cron binding

注意:binding-cron.yamlmetadata部分包含一个Cron表达式,用于指定绑定被调用的频率。

component\binding-postgresql.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

  • 启动PostgreSQL 绑定构建块
  • 使用在binding-postgresql.yaml文件中指定的设置连接到PostgreSQL

使用 binding-postgresql.yaml 组件,您可以轻松更换后端数据库 binding 而无需更改代码。

本快速入门包含的 PostgreSQL binding-postgresql.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: sqldb
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.postgresql
  8. version: v1
  9. metadata:
  10. - name: url # Required
  11. value: "user=postgres password=docker host=localhost port=5432 dbname=orders pool_min_conns=1 pool_max_conns=10"
  12. - name: direction
  13. value: "output" # direction of the postgresql binding

在 YAML 文件中:

  • spec/type指定了此绑定所使用的PostgreSQL。
  • spec/metadata定义了组件使用的PostgreSQL实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

  1. git clone https://github.com/dapr/quickstarts.git

第 2 步:在本地运行 PostgreSQL Docker 容器

在您的机器上,通过在 Docker 容器中本地运行PostgreSQL 实例。 快速入门示例包括一个 Docker Compose 文件,用于在本地自定义、生成、运行和初始化 postgres 容器具有默认值的 orders 表。

在终端窗口中,从Quickstarts克隆目录的根目录导航到bindings/db目录。

  1. cd bindings/db

运行以下命令以设置容器:

  1. docker compose up

验证容器是否正在本地运行。

  1. docker ps

输出应包括:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 55305d1d378b postgres "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp sql_db

第 3 步:预定一个 Cron 任务并写入数据库

在一个新的终端窗口中,导航到 SDK 目录。

  1. cd bindings/go/sdk/batch

安装依赖项:

  1. go build .

与 Dapr sidecar 一起运行 batch-sdk 服务。

  1. dapr run --app-id batch-sdk --app-port 6002 --dapr-http-port 3502 --dapr-grpc-port 60002 --resources-path ../../../components -- go run .

process_batch 函数内的代码每 10 秒执行一次(定义在 binding-cron.yaml 文件中的 components 目录)。 绑定触发器通过 Dapr sidecar 在您的应用程序中寻找 HTTP POST 的路由。

  1. // Triggered by Dapr input binding
  2. r.HandleFunc("/"+cronBindingName, processBatch).Methods("POST")

batch-sdk服务使用在binding-postgresql.yaml组件中定义的PostgreSQL输出绑定,将OrderIdCustomerPrice记录插入orders表中。

  1. func sqlOutput(order Order) (err error) {
  2. client, err := dapr.NewClient()
  3. if err != nil {
  4. return err
  5. }
  6. ctx := context.Background()
  7. sqlCmd := fmt.Sprintf("insert into orders (orderid, customer, price) values (%d, '%s', %s);", order.OrderId, order.Customer, strconv.FormatFloat(order.Price, 'f', 2, 64))
  8. fmt.Println(sqlCmd)
  9. // Insert order using Dapr output binding via Dapr SDK
  10. in := &dapr.InvokeBindingRequest{
  11. Name: sqlBindingName,
  12. Operation: "exec",
  13. Data: []byte(""),
  14. Metadata: map[string]string{"sql": sqlCmd},
  15. }
  16. err = client.InvokeOutputBinding(ctx, in)
  17. if err != nil {
  18. return err
  19. }
  20. return nil
  21. }

第 4 步:查看任务输出

请注意,如上所述,代码将使用 OrderIdCustomerPrice 作为有效载荷来调用输出绑定。

您的输出绑定的print语句输出:

  1. == APP == Processing batch..
  2. == APP == insert into orders (orderid, customer, price) values(1, 'John Smith', 100.32)
  3. == APP == insert into orders (orderid, customer, price) values(2, 'Jane Bond', 15.4)
  4. == APP == insert into orders (orderid, customer, price) values(3, 'Tony James', 35.56)

在一个新的终端中,验证相同的数据是否已插入到数据库中。 进入bindings/db目录。

  1. cd bindings/db

运行以下命令启动交互式 Postgres CLI:

  1. docker exec -i -t postgres psql --username postgres -p 5432 -h localhost --no-password

admin=#提示符下,切换到orders表:

  1. \c orders;

orders=# 提示下,选择所有行:

  1. select * from orders;

输出显示应该如下方所示:

  1. orderid | customer | price
  2. ---------+------------+--------
  3. 1 | John Smith | 100.32
  4. 2 | Jane Bond | 15.4
  5. 3 | Tony James | 35.56

components\binding-cron.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

本快速入门包含的 Cron binding-cron.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: cron
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.cron
  8. version: v1
  9. metadata:
  10. - name: schedule
  11. value: "@every 10s" # valid cron schedule
  12. - name: direction
  13. value: "input" # direction of the cron binding

注意:binding-cron.yamlmetadata部分包含一个Cron表达式,用于指定绑定被调用的频率。

component\binding-postgresql.yaml 组件文件

当您执行dapr run命令并指定组件路径时,Dapr sidecar:

  • 启动PostgreSQL 绑定构建块
  • 使用在binding-postgresql.yaml文件中指定的设置连接到PostgreSQL

使用 binding-postgresql.yaml 组件,您可以轻松更换后端数据库 binding 而无需更改代码。

本快速入门包含的 PostgreSQL binding-postgresql.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: sqldb
  5. namespace: quickstarts
  6. spec:
  7. type: bindings.postgresql
  8. version: v1
  9. metadata:
  10. - name: url # Required
  11. value: "user=postgres password=docker host=localhost port=5432 dbname=orders pool_min_conns=1 pool_max_conns=10"
  12. - name: direction
  13. value: "output" # direction of the postgresql binding

在 YAML 文件中:

  • spec/type指定了此绑定所使用的PostgreSQL。
  • spec/metadata定义了组件使用的PostgreSQL实例的连接。

告诉我们您的想法

我们一直在努力改进我们的快速入门示例,并重视您的反馈。 您觉得此快速入门有帮助吗? 您有改进的建议吗?

加入我们的discord频道参与讨论。

下一步

探索 Dapr 教程 >>