直接发布事件

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

消息必须符合 CloudEvents 规范

gcloud

  1. 打开终端。

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

    gcloud beta eventarc message-buses publish BUS_NAME \
        --avro-message=AVRO_MESSAGE
    或:
    gcloud beta eventarc message-buses publish BUS_NAME \
        --json-message=JSON_MESSAGE
    或:
    gcloud beta 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 或完全限定标识符。

    您必须仅使用以下一项

    • AVRO_MESSAGE:事件消息,采用此规范中的 Avro 格式。
    • JSON_MESSAGE:根据此规范采用 JSON 格式的事件消息。
    • DATA_PAYLOAD:已发布事件的数据。

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

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

    如果使用 --event-data 标志,您可以视需要使用以下选项:

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

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

示例:

gcloud beta eventarc message-buses publish my-bus \
    --event-id=1234 \
    --event-type=event-provider.event.v1.eventType \
    --event-source="//event-provider/event/source" \
    --event-data='{"key": "value"}' \
    --event-attributes=attribute1=value

gcloud beta eventarc message-buses publish my-bus --json-message @- << EOF
{
    "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"}
}
EOF

REST API

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

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

  • 公交车的完整资源名称,格式为 projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    替换以下内容:

    • PROJECT_ID:公交项目的 Google Cloud 项目 ID。
    • LOCATION:部署此总线的区域,例如 us-central1
    • BUS_NAME:要发布事件的总线的名称。
  • SPEC_VERSION:事件使用的 CloudEvents 规范版本,例如 1.0
  • EVENT_TYPE:与起始发生情况相关的事件类型。
  • EVENT_SOURCE:已发布事件的事件来源。
  • EVENT_ID:事件标识符。 生产者必须确保对于每个不同的事件,source + id 都是唯一的。
  • CONTENT_TYPE(可选):data 值的内容类型。如果 JSON 格式事件没有 datacontenttype 属性,则系统会假定数据是符合 application/json 媒体类型的 JSON 值。
  • DATA_PAYLOAD(可选):事件载荷编码为 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

{}

后续步骤