从 Pub/Sub 接收事件

了解如何在 Cloud Run for Anthos on Google Cloud 中部署服务,然后通过 Pub/Sub 创建事件并将其发送到该服务。

准备工作

为完成此任务,您必须拥有一个事件代理,并知道它正在哪个命名空间中运行。了解如何配置 Events for Cloud Run for Anthos 以及创建事件代理

如果您正在运行事件代理,则可以运行以下命令来查看 Kubernetes 命名空间

kubectl get brokers -n NAMESPACE

部署 Cloud Run for Anthos 事件接收器服务

部署 Cloud Run for Anthos 服务,用于接收事件代理的事件。

如需部署 Cloud Run for Anthos 服务,请执行以下操作:

  1. 克隆代码库:

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/pubsub
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/pubsub
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/pubsub
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/pubsub
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/pubsub
    
  2. 构建容器并将其上传到 Cloud Build:

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_FILENAME
    

    其中 CLOUD_RUN_CONTAINER_FILENAME 是容器的文件名。

  3. 将容器映像部署到 Cloud Run for Anthos:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

    其中 NAMESPACE 是事件代理所在的命名空间。

当您看到服务网址时,表示已成功部署容器映像。

为 Pub/Sub 创建触发器

  1. 创建 Pub/Sub 主题:

    gcloud pubsub topics create TOPIC_NAME
    
  2. 使用 --parameters topic=TOPIC_NAME--target-service=CLOUD_RUN_SERVICE_NAME 创建触发器:

    gcloud beta events triggers create TRIGGER_NAME \
      --namespace NAMESPACE \
      --target-service=CLOUD_RUN_SERVICE_NAME \
      --type=google.cloud.pubsub.topic.v1.messagePublished \
      --source=CloudPubSubSource \
      --parameters topic=TOPIC_NAME
    

    其中,NAMESPACE 是事件代理所在的命名空间,TOPIC-NAME 是您创建的 Pub/Sub 主题的名称,CLOUD_RUN_SERVICE_NAME 是 Cloud Run for Anthos 上的事件接收器服务的名称。

  3. 可选)使用 gcloud 命令行工具验证触发器是否正常运行:

    gcloud beta events triggers list \
      --target-service 'CLOUD_RUN_SERVICE_NAME' \
      --namespace NAMESPACE
    

    其中 NAMESPACE 是事件代理所在的命名空间。

    输出内容类似如下:

    TRIGGER         EVENT TYPE                                      TARGET
    trigger-name    google.cloud.pubsub.topic.v1.messagePublished   cloud-run-service
    

生成事件

  1. 将消息发布到 Pub/Sub 主题:

    gcloud pubsub topics publish TOPIC_NAME \
      --message "World"
    
  2. 通过查看接收 Cloud Run for Anthos 服务的日志来验证发布事件:

    kubectl logs \
      --selector serving.knative.dev/service=CLOUD_RUN_SERVICE_NAME \
      -c user-container \
      -n NAMESPACE \
      --tail=100
    

    其中 NAMESPACE 是事件代理所在的命名空间。

    在日志中,您将看到类似如下所示的条目:

    Hello World! ID: 961750303502725
    

清理

删除在本教程中创建的资源,以避免重复收费。

  1. 输入以下命令,删除触发器:

    gcloud beta events triggers delete TRIGGER-NAME \
        --namespace NAMESPACE
    

    其中 NAMESPACE 是事件代理所在的命名空间。