直接发布事件

您可以使用 Google Cloud CLI 或向 Eventarc 发布 REST API 发送请求,以受支持的格式将 CloudEvents 事件直接发布到 Eventarc Advanced 总线。您还可以使用 Eventarc 客户端库 以受支持的语言访问 Eventarc API。

准备工作

在开始之前,请确保您已完成以下步骤:

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户, 请创建账号,以评估我们的产品在 实际应用场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目

    选择或创建项目所需角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要 Project Creator 角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 权限。了解如何授予 角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 验证是否已为您的 Google Cloud 项目启用结算功能。

  7. 启用 Eventarc 和 Eventarc 发布 API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您已创建项目,则您可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. 安装 Google Cloud CLI。

  9. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  10. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  11. 创建或选择 Google Cloud 项目

    选择或创建项目所需角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要 Project Creator 角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 权限。了解如何授予 角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  12. 验证是否已为您的 Google Cloud 项目启用结算功能。

  13. 启用 Eventarc 和 Eventarc 发布 API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您已创建项目,则您可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com

直接发布

您直接发布的事件消息必须符合 CloudEvents 规范

gcloud

  1. 打开终端。

  2. 您可以使用 gcloud eventarc message-buses publish 命令将事件发布到总线。例如:

    gcloud eventarc message-buses publish BUS_NAME \
        --avro-message=AVRO_MESSAGE
    或:
    gcloud eventarc message-buses publish BUS_NAME \
        --json-message=JSON_MESSAGE
    或:
    gcloud eventarc message-buses publish BUS_NAME \
        --event-data=DATA_PAYLOAD \
        --event-id=EVENT_ID \
        --event-source=EVENT_SOURCE \
        --event-type=EVENT_TYPE \
        --event-attributes=EVENT_ATTRIBUTE

    替换以下内容:

    • BUS_NAME:要向其发布事件的总线的 ID 或完全限定标识符。

    您必须仅使用以下其中一项:

    如果使用 --event-data 标志,您还必须使用以下内容:

    • EVENT_ID:事件标识符。事件生成方 必须确保source + id对于每个不同事件都是唯一的。
    • EVENT_SOURCE:已发布事件的事件来源。
    • EVENT_TYPE:与原始事件相关的事件类型。

    如果使用 --event-data 标志,您可以选择使用以下内容:

    • EVENT_ATTRIBUTE:已发布事件的属性。 您可以重复使用 --event-attributes 标志来添加更多属性。

      请注意,事件可能包含任意数量的其他自定义 CloudEvents 属性,这些属性具有不同的名称(也称为 扩展属性)。

示例:

gcloud eventarc message-buses publish my-bus \
    --event-data='{"key": "hello-world-data"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json"

gcloud eventarc message-buses publish my-bus --json-message='{
    "specversion" : "1.0",
    "type" :"com.example.someevent",
    "source" : "google.cloud.storage.object.v1.finalized",
    "id" : "A234-1234-1234",
    "time" : "2024-04-05T17:31:00Z",
    "bucket" : "bucketName",
    "datacontenttype" : "application/json",
    "data":{"key": "value"}
}'

REST API

如需将事件发布到总线,请使用 projects.locations.messageBuses.publish 方法。

在使用任何请求数据之前, 请进行以下替换:

  • 总线的完整资源名称,格式为 projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    替换以下内容:

  • SPEC_VERSION:事件使用的 CloudEvents 规范的版本,例如 1.0
  • EVENT_TYPE:与原始事件相关的事件类型。
  • EVENT_SOURCE:已发布事件的事件来源。
  • EVENT_ID:事件标识符。 生成方必须确保 source + id 对于每个不同 事件都是唯一的。
  • CONTENT_TYPE(可选): 值的 content type。data如果 JSON 格式的事件没有 datacontenttype 属性,则假定数据是符合 application/json 媒体类型的 JSON 值。
  • DATA_PAYLOAD(可选):事件载荷,当存在 datacontenttypedataschema 属性时,该载荷会编码为 datacontenttype 指定的媒体格式并遵循 dataschema

请求 JSON 正文:

{
"jsonMessage":
  "{\"specversion\":\"SPEC_VERSION\",
  \"type\":\"EVENT_TYPE\",
  \"source\":\"EVENT_SOURCE\",
  \"id\":\"EVENT_ID\",
  \"datacontenttype\":\"CONTENT_TYPE\",
  \"data\":\"DATA_PAYLOAD\"}"
}

如需发送您的请求,请展开以下选项之一:

如果成功,服务器将返回 HTTP 200 OK 状态代码以及 JSON 格式的空响应正文:

200 OK

{}

后续步骤