本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将事件发布到自定义事件总线
您可以使用两个 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 接受该事件的回复报告。它不报告配送情况。要确认事件已到达,请检查目标。
本节包含以下主题: