GCP

关于 GCP Pub/Sub 组件的详细文档

创建 Dapr 组件

要配置 GCP pub/sub,需创建一个类型为 pubsub.gcp.pubsub 的组件。参考 pub/sub broker 组件文件 了解 ConsumerID 的自动生成方式。查看 发布和订阅指南 了解如何创建和应用 pub/sub 配置。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: gcp-pubsub
spec:
  type: pubsub.gcp.pubsub
  version: v1
  metadata:
  - name: type
    value: service_account
  - name: projectId
    value: <PROJECT_ID> # 替换
  - name: endpoint # 可选
    value: "http://localhost:8085"
  - name: consumerID # 可选 - 默认为应用程序自身的 ID
    value: <CONSUMER_ID>
  - name: identityProjectId
    value: <IDENTITY_PROJECT_ID> # 替换
  - name: privateKeyId
    value: <PRIVATE_KEY_ID> # 替换
  - name: clientEmail
    value: <CLIENT_EMAIL> # 替换
  - name: clientId
    value: <CLIENT_ID> # 替换
  - name: authUri
    value: https://accounts.google.com/o/oauth2/auth
  - name: tokenUri
    value: https://oauth2.googleapis.com/token
  - name: authProviderX509CertUrl
    value: https://www.googleapis.com/oauth2/v1/certs
  - name: clientX509CertUrl
    value: https://www.googleapis.com/robot/v1/metadata/x509/<PROJECT_NAME>.iam.gserviceaccount.com # 替换 PROJECT_NAME
  - name: privateKey
    value: <PRIVATE_KEY> # 替换 x509 证书
  - name: disableEntityManagement
    value: "false"
  - name: enableMessageOrdering
    value: "false"
  - name: orderingKey # 可选
    value: <ORDERING_KEY>
  - name: maxReconnectionAttempts # 可选
    value: 30
  - name: connectionRecoveryInSec # 可选
    value: 2
  - name: deadLetterTopic # 可选
    value: <EXISTING_PUBSUB_TOPIC>
  - name: maxDeliveryAttempts # 可选
    value: 5
  - name: maxOutstandingMessages # 可选
    value: 1000
  - name: maxOutstandingBytes # 可选
    value: 1000000000
  - name: maxConcurrentConnections # 可选
    value: 10

规格元数据字段

字段必需详情示例
projectIdYGCP 项目 IDmyproject-123
endpointN组件使用的 GCP 端点。仅用于本地开发(例如)与 GCP Pub/Sub Emulator 一起使用。运行 GCP 生产 API 时不需要 endpoint"http://localhost:8085"
consumerIDNConsumer ID 将一个或多个消费者组织成一个组。具有相同 consumer ID 的消费者作为一个虚拟消费者工作;例如,消息仅由组中的一个消费者处理一次。如果未提供 consumerID,Dapr 运行时将其设置为 Dapr 应用程序 ID (appID) 值。consumerID 与请求中提供的 topic 一起用于构建 Pub/Sub 订阅 ID可以设置为字符串值(例如 "channel1")或字符串格式值(例如 "{podName}" 等)。查看可以在组件元数据中使用的所有模板标签。
identityProjectIdN如果 GCP pubsub 项目与身份项目不同,使用此属性指定身份项目"myproject-123"
privateKeyIdN如果使用显式凭据,此字段应包含服务账户 JSON 文档中的 private_key_id 字段"my-private-key"
privateKeyN如果使用显式凭据,此字段应包含服务账户 JSON 中的 private_key 字段-----BEGIN PRIVATE KEY-----MIIBVgIBADANBgkqhkiG9w0B
clientEmailN如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_email 字段"myservice@myproject-123.iam.gserviceaccount.com"
clientIdN如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_id 字段106234234234
authUriN如果使用显式凭据,此字段应包含服务账户 JSON 中的 auth_uri 字段https://accounts.google.com/o/oauth2/auth
tokenUriN如果使用显式凭据,此字段应包含服务账户 JSON 中的 token_uri 字段https://oauth2.googleapis.com/token
authProviderX509CertUrlN如果使用显式凭据,此字段应包含服务账户 JSON 中的 auth_provider_x509_cert_url 字段https://www.googleapis.com/oauth2/v1/certs
clientX509CertUrlN如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_x509_cert_url 字段https://www.googleapis.com/robot/v1/metadata/x509/myserviceaccount%40myproject.iam.gserviceaccount.com
disableEntityManagementN设置为 "true" 时,主题和订阅不会自动创建。默认值:"false""true""false"
enableMessageOrderingN设置为 "true" 时,订阅的消息将按顺序接收,具体取决于发布和权限配置。"true""false"
orderingKeyN请求中提供的键。当 enableMessageOrdering 设置为 true 时,用于根据该键对消息进行排序。“my-orderingkey”
maxReconnectionAttemptsN定义最大重连尝试次数。默认值:3030
connectionRecoveryInSecN连接恢复尝试之间的等待时间(以秒为单位)。默认值:22
deadLetterTopicNGCP Pub/Sub 主题的名称。此主题在使用此组件之前必须存在。"myapp-dlq"
maxDeliveryAttemptsN消息传递的最大尝试次数。如果指定了 deadLetterTopicmaxDeliveryAttempts 是消息处理失败的最大尝试次数。一旦达到该次数,消息将被移至死信主题。默认值:55
typeN已弃用 GCP 凭据类型。仅支持 service_account。默认为 service_accountservice_account
maxOutstandingMessagesN给定 streaming-pull 连接可以拥有的最大未完成消息数。默认值:100050
maxOutstandingBytesN给定 streaming-pull 连接可以拥有的最大未完成字节数。默认值:10000000001000000000
maxConcurrentConnectionsN要维护的最大并发 streaming-pull 连接数。默认值:102
ackDeadlineN消息确认持续时间截止时间。默认值:20s1m

GCP 凭据

由于 GCP Pub/Sub 组件使用 GCP Go 客户端库,默认情况下它使用 应用程序默认凭据 进行身份验证。这在 使用客户端库对 GCP 云服务进行身份验证 指南中有进一步解释。

创建 GCP Pub/Sub


对于本地开发,使用 GCP Pub/Sub Emulator 来测试 GCP Pub/Sub 组件。按照 这些说明 运行 GCP Pub/Sub Emulator。

要在本地使用 Docker 运行 GCP Pub/Sub Emulator,请使用以下 docker-compose.yaml

version: '3'
services:
  pubsub:
    image: gcr.io/google.com/cloudsdktool/cloud-sdk:422.0.0-emulators
    ports:
      - "8085:8085"
    container_name: gcp-pubsub
    entrypoint: gcloud beta emulators pubsub start --project local-test-prj --host-port 0.0.0.0:8085

为了使用 GCP Pub/Sub Emulator 与您的 pub/sub 绑定,您需要在组件元数据中提供 endpoint 配置。运行 GCP 生产 API 时不需要 endpoint

projectId 属性必须与 docker-compose.yaml 或 Docker 命令中使用的 --project 匹配。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: gcp-pubsub
spec:
  type: pubsub.gcp.pubsub
  version: v1
  metadata:
  - name: projectId
    value: "local-test-prj"
  - name: consumerID
    value: "testConsumer"
  - name: endpoint
    value: "localhost:8085"

您可以使用“显式”或“隐式”凭据来配置对 GCP pubsub 实例的访问。如果使用显式,大多数字段是必需的。隐式依赖于 dapr 在映射到具有访问 pubsub 所需权限的 Google 服务账户 (GSA) 的 Kubernetes 服务账户 (KSA) 下运行。在隐式模式下,只需要 projectId 属性,其他所有都是可选的。

按照 此处 的说明设置 Google Cloud Pub/Sub 系统。

相关链接