您可以使用 Google Cloud CLI 或向 Eventarc 发布 REST API 发送请求,以受支持的格式将 CloudEvents 事件直接发布到 Eventarc Advanced 总线。您还可以使用 Eventarc 客户端库 以受支持的语言访问 Eventarc API。
准备工作
在开始之前,请确保您已完成以下步骤:
- 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户, 请创建账号,以评估我们的产品在 实际应用场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 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 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 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 -
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 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 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 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
打开终端。
您可以使用
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 或完全限定标识符。
您必须仅使用以下其中一项:
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 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替换以下内容:
PROJECT_ID:总线项目的项目 ID。 Google CloudLOCATION:部署总线的区域,例如us-central1。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(可选):事件载荷,当存在datacontenttype和dataschema属性时,该载荷会编码为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
{}