

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

# 将事件发布到自定义事件总线
<a name="eb-custom-bus-publish"></a>

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

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


|  | `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 和原始字节](eb-custom-bus-open-formats.md)。 | 
| 你自己的元数据 | 不可用 | Metadata，一张最多包含 100 个按键的地图 | 
| 对输入进行排序和重复数据删除 | SystemMetadata.EventGroupId, SystemMetadata.DeduplicationId | 同样的两个字段 | 
| 使用场景 | 您的事件是 JSON，您想要的信封与自定义事件总线-Classic 生成的封套相同 | 您的负载是二进制或非 JSON，您需要自己的元数据密钥，或者您希望有效负载完全按照发送的方式交付 | 

## 发布 API
<a name="eb-custom-bus-publish-apis"></a>

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

### 使用发布 JSON 事件 PutEvents
<a name="eb-custom-bus-publish-putevents"></a>

```
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
<a name="eb-custom-bus-publish-putrawevents"></a>

`Data`是一个二进制字段。在中 Amazon 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-configuration``RegistryUri`是 Glue Amazon 架构注册表 ARN 或 Confluent Cloud HTTPS 网址。注册表是按请求命名的，而不是在总线上命名的。内容类型为的事件`application/octet-stream`不需要注册表，因为 EventBridge 不会对其进行解码。

## 发布原始字节
<a name="eb-custom-bus-publish-raw-bytes"></a>

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

## 阅读回复
<a name="eb-custom-bus-publish-results"></a>

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

`SuccessCode`是`PUBLISHED`或`DEDUPLICATED`。`DEDUPLICATED`表示将该条目 EventBridge 识别为其已接受的活动的副本，并且未存储第二份副本。这是成功的，不是错误。有关更多信息，请参阅 [在自定义事件总线上对事件进行排序和重复事件删除](eb-custom-bus-ordering.md)。

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

本节包含以下主题：
+ [支持的内容类型：JSON、Avro、Protobuf 和原始字节](eb-custom-bus-open-formats.md)
+ [自定义事件总线的事件源](eb-custom-bus-event-sources.md)
+ [事件结构：数据、元数据和系统元数据](eb-custom-bus-addressing.md)