AWS SQS: Como publicar e consumir mensagens com Spring Cloud AWS
Tags: aws, sqs, producer, consumer
Published: 2024-01-28 16:35:18

{% embed https://www.youtube.com/watch?v=56_F59cIT8M %}

**_[TRANSCRIÇÃO]_**

Fala Devs, como vocês estão? Aqui quem fala é Bruno Garcia, criador da Build & Run. 

No artigo de hoje, vamos explorar o serviço Simple Queue Service (SQS) da AWS, utilizando o Spring Cloud AWS para criar tanto um produtor quanto um consumidor de mensagens. 

O SQS é amplamente utilizado no ecossistema de microsserviços para proporcionar um desacoplamento eficiente entre as aplicações. Sem enrolação, vamos ao tutorial!

## Instalação da LocalStack e AWS CLI:
Antes de começarmos, certifique-se de ter a LocalStack instalada no seu ambiente local. Se ainda não fez isso, confira [nosso vídeo de instalação](https://www.youtube.com/watch?v=yOdp0wz5NeI), onde explicamos o passo a passo. 

Agora que a LocalStack está pronta, podemos prosseguir.

## Iniciando o Projeto Spring Boot:
Acesse o site do [Spring Initilizr](http://start.spring.io) para iniciar nosso projeto Spring Boot. Configure o projeto com as seguintes opções: Linguagem Java, projeto Maven, versão 3.2, dependência Spring Web. Certifique-se de ter o Java 21 instalado. Após a configuração, inicie o projeto e importe-o no IntelliJ.

## Configurando o Spring Cloud AWS:
Agora, é hora de configurar o Spring Cloud AWS. Abra o arquivo pom.xml e adicione a dependência necessária para a integração com o SQS. O código deve ficar semelhante ao seguinte:

```
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
    <version>3.0.1</version>
</dependency>
```

Execute o Maven para baixar as dependências. Em seguida, crie uma classe de configuração para o cliente SQS, indicando o endpoint da LocalStack e a região desejada.

```
@Configuration
public class SqsConfig {

    @Bean
    public SqsAsyncClient sqsAsyncClient() {
        return SqsAsyncClient.builder()
                .endpointOverride(URI.create("http://localhost:4566"))
                .region(Region.SA_EAST_1)
                .build();
    }
}
```

## Criando um Consumer do AWS SQS:
Agora, vamos criar um consumidor para a fila SQS. Crie uma classe com a anotação @Component e utilize @SqsListener para escutar a fila. O método receberá a mensagem e poderá processá-la conforme necessário. Teste o consumidor enviando mensagens para a fila.

```
public record MyMessage(String content) {
}
```

```
@Component
public class MyConsumer {

    @SqsListener("minha-fila")
    public void listen(MyMessage message) {
        System.out.println("Message received: " + message.content());
    }
}
```

## Criando um Producer do AWS SQS:
Para finalizar, criaremos um produtor para nossa aplicação enviar mensagens para a fila SQS. Utilizaremos a interface CommandLineRunner do Spring Boot para executar o envio assim que a aplicação inicializar. O código será semelhante ao seguinte:

```
@SpringBootApplication
public class SqsApplication implements CommandLineRunner {

	public static void main(String[] args) {
		SpringApplication.run(SqsApplication.class, args);
	}

	@Autowired
	private SqsTemplate sqsTemplate;

	@Override
	public void run(String... args) throws Exception {
		var SQS = "https://localhost.localstack.cloud:4566/000000000000/minha-fila";
		sqsTemplate.send(SQS, new MyMessage("meu valor de start"));
	}
}
```

## Conclusão:
E assim concluímos nosso guia prático de utilização do AWS SQS com Spring Cloud. Espero que este tutorial tenha sido útil para você. 

Caso tenha gostado, não esqueça de deixar seu like, se inscrever no canal e comentar sugestões para os próximos vídeos. Até a próxima!