

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Envio de eventos com `PutEvents` a Amazon EventBridge
Enviando eventos com PutEvents

A `PutEvents` ação envia vários [eventos](eb-events.md) EventBridge em uma única solicitação. Para obter mais informações, consulte [PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)na *Amazon EventBridge API Reference* e [put-events](https://docs.aws.amazon.com/cli/latest/reference/events/put-events.html) na *AWS CLI Command* Reference.

Cada solicitação `PutEvents` pode oferecer suporte a um número limitado de entradas. Para obter mais informações, consulte [EventBridge Cotas da Amazon](eb-quota.md). A operação `PutEvents` tenta processar todas as entradas na ordem natural da solicitação. Depois de ligar`PutEvents`, EventBridge atribua a cada evento uma ID exclusiva.

O exemplo de código Java a seguir envia dois eventos idênticos para EventBridge.

------
#### [ AWS SDK for Java Version 2.x ]

```
EventBridgeClient eventBridgeClient =
    EventBridgeClient.builder().build();

PutEventsRequestEntry requestEntry = PutEventsRequestEntry.builder()
    .resources("resource1", "resource2")
    .source("com.mycompany.myapp")
    .detailType("myDetailType")
    .detail("{ \"key1\": \"value1\", \"key2\": \"value2\" }")
    .build();

List <
PutEventsRequestEntry > requestEntries = new ArrayList <
PutEventsRequestEntry > ();
requestEntries.add(requestEntry);

PutEventsRequest eventsRequest = PutEventsRequest.builder()
    .entries(requestEntries)
    .build();

PutEventsResponse result = eventBridgeClient.putEvents(eventsRequest);

for (PutEventsResultEntry resultEntry: result.entries()) {
    if (resultEntry.eventId() != null) {
        System.out.println("Event Id: " + resultEntry.eventId());
    } else {
        System.out.println("PutEvents failed with Error Code: " + resultEntry.errorCode());
    }
}
```

------
#### [ AWS SDK for Java Version 1.0 ]

```
EventBridgeClient eventBridgeClient =
    EventBridgeClient.builder().build();
    
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry()
        .withTime(new Date())
        .withSource("com.mycompany.myapp")
        .withDetailType("myDetailType")
        .withResources("resource1", "resource2")
        .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }");

PutEventsRequest request = new PutEventsRequest()
        .withEntries(requestEntry, requestEntry);

PutEventsResult result = awsEventsClient.putEvents(request);

for (PutEventsResultEntry resultEntry : result.getEntries()) {
    if (resultEntry.getEventId() != null) {
        System.out.println("Event Id: " + resultEntry.getEventId());
    } else {
        System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode());
    }
}
```

------

Depois de executar esse código, o resultado `PutEvents` inclui uma matriz de entradas de resposta. Cada entrada na matriz de resposta corresponde diretamente com uma entrada na matriz em ordem, do início ao fim da solicitação e da resposta. A matriz `Entries` de resposta sempre inclui o mesmo número de entradas que a solicitação.

## Como lidar com falhas com `PutEvents`


Por padrão, se uma entrada individual em uma solicitação falhar, EventBridge continuará processando o restante das entradas na solicitação. Uma matriz `Entries` de respostas pode incluir entradas com e sem êxito. É preciso detectar entradas processadas sem êxito e incluí-las em uma chamada subsequente.

As entradas de resultados com êxito incluem um valor `Id`, e as entradas de resultados sem êxito incluem valores `ErrorCode` e `ErrorMessage`. `ErrorCode`descreve o tipo de erro. `ErrorMessage` fornece mais informações sobre o erro. O exemplo a seguir tem três entradas de resultado de uma solicitação `PutEvents`. A segunda entrada não teve êxito.

```
{
    "FailedEntryCount": 1, 
    "Entries": [
        {
            "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860"
        },
        {   "ErrorCode": "InternalFailure",
            "ErrorMessage": "Internal Service Failure"
        },
        {
            "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82"
        }
    ]
}
```

**nota**  
Se você costuma `PutEvents` publicar um evento em um barramento de eventos que não existe, a correspondência de EventBridge eventos não encontrará uma regra correspondente e cancelará o evento. Embora EventBridge envie uma `200` resposta, ela não falhará na solicitação nem incluirá o evento no `FailedEntryCount` valor da resposta da solicitação.

É possível incluir as entradas que foram processadas sem êxito nas solicitações `PutEvents` subsequentes. Primeiro, para descobrir se há entradas com falha na solicitação, verifique o parâmetro `FailedRecordCount` em `PutEventsResult`. Se não for zero, cada `Entry` tenha um `ErrorCode` poderá ser adicionada, que não seja nula a uma solicitação subsequente. O exemplo a seguir mostra um manipulador com falha.

```
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry()
        .withTime(new Date())
        .withSource("com.mycompany.myapp")
        .withDetailType("myDetailType")
        .withResources("resource1", "resource2")
        .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }");

List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    putEventsRequestEntryList.add(requestEntry);
}

PutEventsRequest putEventsRequest = new PutEventsRequest();
putEventsRequest.withEntries(putEventsRequestEntryList);
PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest);

while (putEventsResult.getFailedEntryCount() > 0) {
    final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>();
    final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries();
    for (int i = 0; i < PutEventsResultEntryList.size(); i++) {
        final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i);
        final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i);
        if (putEventsResultEntry.getErrorCode() != null) {
            failedEntriesList.add(putEventsRequestEntry);
        }
    }
    putEventsRequestEntryList = failedEntriesList;
    putEventsRequest.setEntries(putEventsRequestEntryList);
    putEventsResult = awsEventsClient.putEvents(putEventsRequest);
    }
```

## Enviando eventos usando o AWS CLI


Você pode usar o AWS CLI para enviar eventos personalizados para EventBridge que eles possam ser processados. O exemplo a seguir coloca um evento personalizado em EventBridge:

```
aws events put-events \
--entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]'
```

Também é possível criar um arquivo JSON que contenha eventos personalizados.

```
[
  {
    "Time": "2016-01-14T01:02:03Z",
    "Source": "com.mycompany.myapp",
    "Resources": [
      "resource1",
      "resource2"
    ],
    "DetailType": "myDetailType",
    "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"
  }
]
```

Em seguida, para usar o AWS CLI para ler as entradas desse arquivo e enviar eventos, em um prompt de comando, digite:

```
aws events put-events --entries file://entries.json
```

## Calculando o tamanho da entrada do PutEvents evento
Como calcular o tamanho da entrada do evento

Ao enviar eventos personalizados para EventBridge usar a `PutEvents` ação, você pode agrupar até 10 entradas de eventos em uma solicitação de eficiência. O tamanho total da solicitação, ou seja, a soma de todas as entradas de eventos na solicitação, deve ser menor que 1 MB. Esse limite se aplica à solicitação como um todo, não às entradas individuais. Um único evento pode usar até 1 MB completo se for a única entrada na solicitação. Também é possível calcular o tamanho da entrada antes de enviar os eventos.



**nota**  
O limite de tamanho é imposto na *entrada*. Mesmo que a entrada seja menor que o limite de tamanho, o *evento* em EventBridge é sempre maior que o tamanho da entrada devido aos caracteres e chaves necessários da representação JSON do evento. Para obter mais informações, consulte [Eventos na Amazon EventBridge](eb-events.md).

EventBridge calcula o `PutEventsRequestEntry` tamanho da seguinte forma:
+ Se o parâmetro `Time` for especificado, ele será medido como 14 bytes.
+ Os parâmetros `Source` e `DetailType` são o número de bytes para seus formulários codificados em UTF-8.
+ Se o parâmetro `Detail` for especificado, ele será medido como o número de bytes para seu formato codificado UTF-8.
+ Se o parâmetro `Resources` for especificado, cada entrada será medida como o número de bytes para seus formulários codificados UTF-8.

O código em Java de exemplo a seguir calcula o tamanho de um determinado objeto `PutEventsRequestEntry`: Para verificar se o limite de 1 MB não foi violado, você precisa realizar o cálculo de todos os eventos em uma solicitação.

```
int getSize(PutEventsRequestEntry entry) {
    int size = 0;
    if (entry.getTime() != null) {
        size += 14;
    }
    size += entry.getSource().getBytes(StandardCharsets.UTF_8).length;
    size += entry.getDetailType().getBytes(StandardCharsets.UTF_8).length;
    if (entry.getDetail() != null) {
        size += entry.getDetail().getBytes(StandardCharsets.UTF_8).length;
    }
    if (entry.getResources() != null) {
        for (String resource : entry.getResources()) {
            if (resource != null) {
                size += resource.getBytes(StandardCharsets.UTF_8).length;
            }
        }
    }
    return size;
}
```

**nota**  
Se o tamanho da entrada for maior que 1 MB, recomendamos fazer o upload do evento em um bucket do Amazon S3 e incluí-lo `Object URL` na entrada. `PutEvents`