

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á.

# Exemplos de SDK do Java do Amazon SQS
<a name="sqs-java-tutorials"></a>

O AWS SDK para Java permite que você crie aplicações Java que interagem com o Amazon SQS e outros Serviços da AWS.
+ Para instalar e configurar o SDK, consulte [Conceitos básicos](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getting-started.html) no *Guia do desenvolvedor do AWS SDK for Java 2.x*.
+ Para obter operações básicas de fila, como criar uma fila ou enviar uma mensagem, consulte [ Trabalhar com filas de mensagens do Amazon SQS](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/sqs-examples.html) no *Guia do desenvolvedor do AWS SDK for Java 2.x*.
+ Este guia também inclui exemplos de recursos adicionais do Amazon SQS, como:
  + [Usar criptografia do lado do servidor com filas do Amazon SQS](sqs-java-configure-sse.md)
  + [Configurar tags para uma fila do Amazon SQS](sqs-java-add-update-remove-tag-queue.md)
  + [Enviar atributos de mensagem para uma fila do Amazon SQS](sqs-java-send-message-with-attributes.md)

# Usar criptografia do lado do servidor com filas do Amazon SQS
<a name="sqs-java-configure-sse"></a>

Use o AWS SDK para Java para adicionar criptografia do lado do servidor (SSE) a uma fila do Amazon SQS. Cada fila usa uma chave do KMS AWS Key Management Service (AWS KMS) para gerar as chaves de criptografia dos dados. Este exemplo usa a chave do KMS gerenciada pela AWS para o Amazon SQS.

Para obter mais informações sobre como usar a SSE e a função da chave do KMS, consulte [Criptografia em repouso no Amazon SQS](sqs-server-side-encryption.md). 

## Adicionar SSE a uma fila existente
<a name="sqs-java-configure-sse-existing-queue"></a>

Para habilitar a criptografia no lado do servidor para uma fila existente, use o método `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` para definir o atributo `KmsMasterKeyId`.

O exemplo de código a seguir define a AWS KMS key como a chave AWS gerenciada do KMS para o Amazon SQS. O exemplo também define o [período de reutilização de AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) como 140 segundos.

 Antes de executar o código de exemplo, verifique se você definiu suas AWS credenciais. Para obter mais informações, consulte [Configurar AWS credenciais e região para desenvolvimento](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) no *Guia do AWS SDK for Java 2.x desenvolvedor*. 

```
    public static void addEncryption(String queueName, String kmsMasterKeyAlias) {
        SqsClient sqsClient = SqsClient.create();

        GetQueueUrlRequest urlRequest = GetQueueUrlRequest.builder()
                .queueName(queueName)
                .build();

        GetQueueUrlResponse getQueueUrlResponse;
        try {
            getQueueUrlResponse = sqsClient.getQueueUrl(urlRequest);
        } catch (QueueDoesNotExistException e) {
            LOGGER.error(e.getMessage(), e);
            throw new RuntimeException(e);
        }
        String queueUrl = getQueueUrlResponse.queueUrl();


        Map<QueueAttributeName, String> attributes = Map.of(
                QueueAttributeName.KMS_MASTER_KEY_ID, kmsMasterKeyAlias,
                QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS, "140" // Set the data key reuse period to 140 seconds.
        );                                                                  // This is how long SQS can reuse the data key before requesting a new one from KMS.

        SetQueueAttributesRequest attRequest = SetQueueAttributesRequest.builder()
                .queueUrl(queueUrl)
                .attributes(attributes)
                .build();
        try {
            sqsClient.setQueueAttributes(attRequest);
            LOGGER.info("The attributes have been applied to {}", queueName);
        } catch (InvalidAttributeNameException | InvalidAttributeValueException e) {
            LOGGER.error(e.getMessage(), e);
            throw new RuntimeException(e);
        } finally {
            sqsClient.close();
        }
    }
```

## Desabilitar a SSE para uma fila
<a name="sqs-java-disable-sse"></a>

Para desabilitar a criptografia no lado do servidor para uma fila existente, defina o atributo `KmsMasterKeyId` como uma string vazia usando o método `SetQueueAttributes`.

**Importante**  
`null` não é um valor válido para `KmsMasterKeyId`.

## Criar uma fila com SSE
<a name="sqs-java-configure-sse-create-queue"></a>

Para habilitar a SSE ao criar a fila, adicione o atributo `KmsMasterKeyId` ao método da API `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`.

O exemplo a seguir cria uma fila nova com a SSE habilitada. A fila usa a chave do KMS gerenciada pela AWS para o Amazon SQS. O exemplo também define o [período de reutilização de AWS KMS key](sqs-server-side-encryption.md#sqs-sse-key-terms) como 160 segundos.

 Antes de executar o código de exemplo, verifique se você definiu suas AWS credenciais. Para obter mais informações, consulte [Configurar AWS credenciais e região para desenvolvimento](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) no *Guia do AWS SDK for Java 2.x desenvolvedor*. 

```
// Create an SqsClient for the specified Region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Create a hashmap for the attributes. Add the key alias and reuse period to the hashmap.
HashMap<QueueAttributeName, String> attributes = new HashMap<QueueAttributeName, String>();
final String kmsMasterKeyAlias = "alias/aws/sqs";  // the alias of the AWS managed KMS key for Amazon SQS.
attributes.put(QueueAttributeName.KMS_MASTER_KEY_ID, kmsMasterKeyAlias);
attributes.put(QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS, "140");				

// Add the attributes to the CreateQueueRequest.
CreateQueueRequest createQueueRequest =
                CreateQueueRequest.builder()
                        .queueName(queueName)
                        .attributes(attributes)
                        .build();
sqsClient.createQueue(createQueueRequest);
```

## Recuperar atributos de SSE
<a name="sqs-java-get-sse-attributes"></a>

Para obter informações sobre como recuperar atributos da fila, consulte [Exemplos](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html#API_GetQueueAttributes_Examples) na *Referência da API do Amazon Simple Queue Service*.

Para recuperar o ID da chave do KMS ou o período de reutilização da chave de dados de uma fila específica, execute o método `[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)` e recupere os valores `KmsMasterKeyId` e `KmsDataKeyReusePeriodSeconds`.

# Configurar tags para uma fila do Amazon SQS
<a name="sqs-java-add-update-remove-tag-queue"></a>

Use tags de alocação de custos em suas filas do Amazon SQS para ajudar a organizá-las e identificá-las. Os exemplos a seguir mostram como gerenciar tags usando o AWS SDK para Java. Para obter mais informações, consulte [Tags de alocação de custos do Amazon SQS](sqs-queue-tags.md).

 Antes de executar o código de exemplo, verifique se você definiu suas AWS credenciais. Para obter mais informações, consulte [Configurar AWS credenciais e região para desenvolvimento](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) no *Guia do AWS SDK for Java 2.x desenvolvedor*. 

## Listar tags
<a name="sqs-java-list-tags"></a>

Para listar as tags de uma fila, use o método `ListQueueTags`.

```
// Create an SqsClient for the specified region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Get the queue URL.
String queueName = "MyStandardQ1";
GetQueueUrlResponse getQueueUrlResponse =
        sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();

// Create the ListQueueTagsRequest.
final ListQueueTagsRequest listQueueTagsRequest = 
                                  ListQueueTagsRequest.builder().queueUrl(queueUrl).build();

// Retrieve the list of queue tags and print them.
final ListQueueTagsResponse listQueueTagsResponse =
                                  sqsClient.listQueueTags(listQueueTagsRequest);
System.out.println(String.format("ListQueueTags: \tTags for queue %s are %s.\n",
                queueName, listQueueTagsResponse.tags() ));
```

## Adicionar ou atualizar tags
<a name="sqs-java-add-tags"></a>

Para adicionar ou atualizar valores de etiquetas em uma fila, use o método `TagQueue`.

```
 // Create an SqsClient for the specified Region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Get the queue URL.
String queueName = "MyStandardQ1";
GetQueueUrlResponse getQueueUrlResponse =
        sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();	

// Build a hashmap of the tags.
final HashMap<String, String> addedTags = new HashMap<>();
        addedTags.put("Team", "Development");
        addedTags.put("Priority", "Beta");
        addedTags.put("Accounting ID", "456def");

//Create the TagQueueRequest and add them to the queue.
final TagQueueRequest tagQueueRequest = TagQueueRequest.builder()
        .queueUrl(queueUrl)
        .tags(addedTags)
        .build();
sqsClient.tagQueue(tagQueueRequest);
```

## Remover tags
<a name="sqs-java-remove-tags"></a>

Para remover uma ou mais tags da fila, use o método `UntagQueue`. O exemplo a seguir remove a tag `Accounting ID`.

```
 
// Create the UntagQueueRequest.
final UntagQueueRequest untagQueueRequest = UntagQueueRequest.builder()
        .queueUrl(queueUrl)
        .tagKeys("Accounting ID")
        .build();
        
// Remove the tag from this queue.
sqsClient.untagQueue(untagQueueRequest);
```

# Enviar atributos de mensagem para uma fila do Amazon SQS
<a name="sqs-java-send-message-with-attributes"></a>

É possível incluir metadados estruturados (como carimbos de data e hora, dados geoespaciais, assinaturas e identificadores) com mensagens usando os *atributos de mensagem*. Para obter mais informações, consulte [Atributos de mensagem do Amazon SQS](sqs-message-metadata.md#sqs-message-attributes).

 Antes de executar o código de exemplo, verifique se você definiu suas AWS credenciais. Para obter mais informações, consulte [Configurar AWS credenciais e região para desenvolvimento](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials) no *Guia do AWS SDK for Java 2.x desenvolvedor*. 

## Definir atributos
<a name="sqs-java-define-attributes"></a>

Para definir um atributo para uma mensagem, adicione o código a seguir que usa o tipo de dado `[MessageAttributeValue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageAttributeValue.html)`. Para obter mais informações, consulte [Componentes de atributos de mensagem](sqs-message-metadata.md#message-attribute-components) e [Tipos de dados de atributos de mensagem](sqs-message-metadata.md#message-attribute-data-types).

O calcula AWS SDK para Java automaticamente as somas de verificação do corpo da mensagem e do atributo da mensagem e as compara com os dados que o Amazon SQS retorna. Para obter mais informações, consulte o *[Guia do desenvolvedor do AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/)* e [Calculando o resumo da MD5 mensagem para os atributos da mensagem](sqs-message-metadata.md#sqs-attributes-md5-message-digest-calculation) para outras linguagens de programação.

------
#### [ String ]

Este exemplo define um atributo `String` chamado `Name` com o valor `Jane`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("Name", new MessageAttributeValue()
.withDataType("String")
.withStringValue("Jane"));
```

------
#### [ Number ]

Este exemplo define um atributo `Number` chamado `AccurateWeight` com o valor `230.000000000000000001`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("AccurateWeight", new MessageAttributeValue()
.withDataType("Number")
.withStringValue("230.000000000000000001"));
```

------
#### [ Binary ]

Este exemplo define um atributo `Binary` chamado `ByteArray` com o valor de uma matriz de 10 bytes não inicializada.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("ByteArray", new MessageAttributeValue()
.withDataType("Binary")
.withBinaryValue(ByteBuffer.wrap(new byte[10])));
```

------
#### [ String (custom) ]

Este exemplo define o atributo personalizado `String.EmployeeId` chamado `EmployeeId` com o valor `ABC123456`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("EmployeeId", new MessageAttributeValue()
.withDataType("String.EmployeeId")
.withStringValue("ABC123456"));
```

------
#### [ Number (custom) ]

Este exemplo define o atributo personalizado `Number.AccountId` chamado `AccountId` com o valor `000123456`.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("AccountId", new MessageAttributeValue()
.withDataType("Number.AccountId")
.withStringValue("000123456"));
```

**nota**  
Como o tipo de dados base é `Number`, o método `[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)` retorna `123456`.

------
#### [ Binary (custom) ]

Este exemplo define um atributo personalizado `Binary.JPEG` chamado `ApplicationIcon` com o valor de uma matriz de 10 bytes não inicializada.

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("ApplicationIcon", new MessageAttributeValue()
.withDataType("Binary.JPEG")
.withBinaryValue(ByteBuffer.wrap(new byte[10])));
```

------

## Enviar uma mensagem com atributos
<a name="sqs-java-send-attributes"></a>

Este exemplo adiciona os atributos à `SendMessageRequest` antes de enviar a mensagem.

```
// Send a message with an attribute.
final SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.withMessageBody("This is my message text.");
sendMessageRequest.withQueueUrl(myQueueUrl);
sendMessageRequest.withMessageAttributes(messageAttributes);
sqs.sendMessage(sendMessageRequest);
```

**Importante**  
Se você enviar uma mensagem para uma fila First-In-First-Out (FIFO), verifique se o `sendMessage` método é executado *depois* de fornecer a ID do grupo de mensagens.  
Se usar o método `[SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)` em vez de `[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)`, você deverá especificar os atributos da mensagem de cada mensagem no lote.