View a markdown version of this page

将事件发布到自定义事件总线 - 亚马逊 EventBridge

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将事件发布到自定义事件总线

您可以使用两个 API 操作之一将事件发布到自定义事件总线,PutEvents或PutRawEvents。您选择的操作会固定传送事件的形状,而该形状决定了您如何为总线编写每个滤波器、变压器和目标参数。在写下第一个订阅者之前,请先选择。有关这两种形状,请参见事件结构:数据、元数据和系统元数据。

这两个操作会生成一种事件,一旦事件上线,就会 EventBridge 对它们进行相同的处理。PutEvents很方便PutRawEvents: EventBridge 获取条目的Source、DetailTypeDetail、和其他字段,从中构建 JSON 封套,并将该信封存储为内容类型为 JSON 负载application/eventbridge+json。从那时起,筛选、转换、排序、重复数据删除、保留和交付的工作原理与PutRawEvents发布的 JSON 事件完全相同。订阅者看到的唯一区别是你的字段在哪里:在 Data for 的顶Data.detail部PutRawEvents,在信封的下方PutEvents。有关 Avro、Protobuf 和不透明的有效载荷,请参阅。支持的内容类型:JSON、Avro、Protobuf 和原始字节

PutEvents PutRawEvents
有效载荷字段 Detail,一个 JSON 字符串 Data,任何格式的字节
每个条目均为必填项 Source, DetailType Data, SystemMetadata.ContentType
内容类型 设置 EventBridge 为 application/eventbridge+json 由您设置:application/jsonapplication/avro、application/protobuf、或application/octet-stream。请参阅支持的内容类型:JSON、Avro、Protobuf 和原始字节。
你自己的元数据 不可用 Metadata,一张最多包含 100 个按键的地图
对输入进行排序和重复数据删除 SystemMetadata.EventGroupId, SystemMetadata.DeduplicationId 同样的两个字段
使用场景 您的事件是 JSON,您想要的信封与自定义事件总线-Classic 生成的封套相同 您的负载是二进制或非 JSON,您需要自己的元数据密钥,或者您希望有效负载完全按照发送的方式交付

发布 API

这两个操作都会批量处理每个请求 1 到 100 个条目,并按请求顺序返回每个条目一个结果。 EventBridge 单独接受或拒绝每个条目:被拒绝的条目ErrorMessage以ErrorCode和代替 aSuccessCode,同一请求中的其他条目不受影响。批处理属于一起的条目,读取所有结果,而不是只读取 HTTP 状态;请参阅阅读回复。这两个调用均来自您账户的同一个发布费率预算,并且总线本身有每秒的摄取配额,该配额计入了每个发布商和事件来源;请参阅。自定义事件总线配额

使用发布 JSON 事件 PutEvents

aws eventsv2 put-events \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --entries '[ { "Source": "com.example.orders", "DetailType": "OrderPlaced", "Detail": "{\"orderId\":\"1001\",\"total\":42.5}" } ]'

使用以下方式发布原始事件 PutRawEvents

Data是一个二进制字段。在中 AWS CLI,将其作为 base64 文本提供。以下示例发布了与内容类型为的原始字节相同的 JSON 负载application/json,并添加了元数据密钥。

aws eventsv2 put-raw-events \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --entries '[ { "Data": "eyJvcmRlcklkIjoiMTAwMSIsInRvdGFsIjo0Mi41fQ==", "Metadata": { "tenant": "acme" }, "SystemMetadata": { "ContentType": "application/json" } } ]'

要发布 Avro 或 Protobuf,请在请求中使用命名架构注册表。--schema-registry-configurationRegistryUri是 Glue AWS 架构注册表 ARN 或 Confluent Cloud HTTPS 网址。注册表是按请求命名的,而不是在总线上命名的。内容类型为的事件application/octet-stream不需要注册表,因为 EventBridge 不会对其进行解码。

发布原始字节

要发布既不 EventBridge 应该解析也不应该检查的负载,请在调PutRawEvents用时输入字节 Base64-encoded Data并将其SystemMetadata.ContentType设置为application/octet-stream。 EventBridge 存储和传送的字节与发送的字节完全相同,因此DATA过滤器无法匹配它们;使用您在条目上设置的METADATA密钥或使用它们进行路由SYSTEM_METADATA。订阅者的变压器将有效载荷视为 Base64 字符串。$events.Data有关 Avro 和 Protobuf 的交付选择和反序列化替代方案,请参见支持的内容类型:JSON、Avro、Protobuf 和原始字节;有关有效载荷在变压器中的外观,请参阅。使用 JSonata 转换事件

阅读回复

这两个操作都会按照与请求相同的顺序为每个条目返回一个结果。每个结果都带有 a SuccessCode 或 ErrorCode and ErrorMessage。检查每个条目,因为请求可以成功,而单个条目会失败。

SuccessCode是PUBLISHED或DEDUPLICATED。DEDUPLICATED表示将该条目 EventBridge 识别为其已接受的活动的副本,并且未存储第二份副本。这是成功的,不是错误。有关更多信息,请参阅 对自定义事件总线上的事件进行排序和重复数据消除。

A 发布 EventBridge 接受该事件的回复报告。它不报告配送情况。要确认事件已到达,请检查目标。

本节包含以下主题: