Evitar mensagens duplicadas na fila pode ser um requisito básico para o modelo do seu negócio. A SQS possui um recurso de "desduplicação" de mensagens bem interessante.
Este recurso está presente apenas em filas do tipo FIFO
Existe duas formas de configurar:
1. Na configuração da fila, habilite a opção Desduplicação baseada em conteúdo
2. Uma outra forma de configurar seria no ato do envio da mensagem. Neste caso a fila não precisa ser configurada conforme o item 1.
Segue um trecho de código Java utilizando a SDK da AWS que exemplifica este cenário:
AmazonSQS amazonSQS = AmazonSQSClientBuilder.standard()
.withRegion(Regions.US_EAST_1)
.build();
SendMessageRequest messageRequest = new SendMessageRequest();
messageRequest.setMessageBody("mensagem");
messageRequest.setMessageGroupId("id-grupo");
messageRequest.setMessageDeduplicationId("id-desduplicação");
messageRequest.setQueueUrl("url-da-fila");
amazonSQS.sendMessage(messageRequest);
Neste caso é necessário atribuir um ID que identifica a mensagem como duplicada, conforme o trecho:
messageRequest.setMessageDeduplicationId("id-desduplicação");
O código descrito no item 2 pode ser utilizado para o item 1, mas nesse caso, o trecho anterior é opcional.
Ponto de atenção
Este recurso só funciona quando mensagens de mesmo conteúdo são enviadas em um intervalo de até 5 minutos. Caso o intervalo entre elas seja maior que 5 minutos, a fila receberá a mensagem duplicada.
Comments