Construindo um serviço utilizando Spring boot + AWS SQS

Gabriel Paiva
Equals Lab
Published in
6 min readSep 26, 2019
Spring boot + AWS SQS

Olá pessoal, tudo bem? Hoje vamos construir um serviço simples utilizando o framework spring boot em conjunto com o serviço de fila da Amazon, Aws SQS, que recebe e entrega mensagens de filas.

O principal objetivo é aprender como realizar a conexão entre nosso serviço Spring Boot e filas na AWS SQS.

Mas antes de começar vamos procurar entender o que são essas duas ferramentas que iremos utilizar.

Antes de iniciarmos, vou deixar o link do repositório criado com a aplicação final, clique aqui. Esse tutorial será focado na configuração da aplicação para enviar e receber mensagens de uma fila da SQS, não irei cobrir o tópico de como criar uma conta na AWS ou criar uma fila, entretanto irei deixar alguns links de fontes para eventuais pesquisas.

Spring Boot framework

É um framework Web baseado no Spring Framework que pode ser escrito em Java, Kotlin ou Groovy. Seu intuito ao ser criado foi facilitar toda a parte de configuração do Spring Framework, conhecida por ser muito verbosa, e focar no desenvolvimento das funcionalidades que envolvem sua regra de negócio.

AWS SQS — Simple queue service

De acordo com a amazon, “O Amazon Simple Queue Service (SQS) é um serviço de filas de mensagens gerenciado que permite o desacoplamento e a escalabilidade de microsserviços, sistemas distribuídos e aplicativos sem servidor. O SQS elimina a complexidade e a sobrecarga associadas ao gerenciamento e à operação de middleware orientado a mensagens, além de permitir que os desenvolvedores se dediquem a criar diferenciais”.

Com o serviço de fila da Amazon podemos focar para construir a comunicação entre serviços de forma simples e fácil, sem precisar se preocupar com toda infraestrutura e configurações que envolvem a sustentação de um serviço de fila.

Gerando o projeto inicial utilizando o Spring Initializr

Imagem do sistema de geração da aplicação utilizando spring boot.

Iremos utilizar o site do spring boot initializr para começar nossa aplicação, nele podemos escolher as dependências do nosso projeto, a linguagem de programação que será usada , o sistema de gerenciamento de depêndencias, versão do framework e outras coisas.

Inicialmente, iremos gerar um sistema apenas com a depedência web. Após escolher a depêndencia igual da imagem acima, basta pressionar ctrl + enter para baixar o zip com o projeto. Após isso importe o projeto na sua IDE preferida, eu estou utilizando o intellij.

Adicionando as dependências necessárias para o funcionamento da nossa comunição com a SQS

Será necessário adicionar basicamente 3 depêndencias:

  1. Spring JMS : Responsável por prover uma maneira mais simplificada de lidar com JMS API do Java.
  2. AWS SDK : Responsável por facilitar a integração da nossa aplicação com os serviços da AWS. A lib abaixo utiliza a AWS SDK para criar seu métodos para a comunicação com o serviço simples de fila (SQS) da Amazon.
  3. Amazon SQS Java Messaging : Responsável por prover as implementações da API JMS do spring, é através dessa lib que seremos capaz de enviar, receber mensagens e criar e deletar filas da SQS.

Afinal, o que fará nossa aplicação?

Nossa aplicação será responsável por processar um pedido de uma compra, realizar a validação das informações e produzir uma mensagem aceitando ou não o pedido de compra.

Criando nossa classe de configuração da JMS

Essa classe é a mais importante da nossa aplicação, eu diria. Ela será responsável por realizar a conexão com a AWS assim que nossa aplicação ser executada. Através dos métodos dela seremos capaz de ouvir mensagens e produzir mensagens em filas da SQS.

  1. A classe possuí 3 atributos principais: accessKey e secretKey são, respectivamente, a chave de acesso e a chave secreta providas pela amazon para realizarmos o acesso, elas são nossas credenciais, você pode criar seus usuários e suas chaves a partir do serviço IAM da AWS, não irei ensinar nesse post para não ficar muito longo. O atributo connectionFactory é responsável por realizar a conexão da nossa aplicação com a AWS SQS utilizando nossas crendenciais.
  2. Método createConnectionFactory é responsável por instanciar nossa connectionFactory, que basicamente é criar a conexão entre nossa aplicação e a SQS.
  3. Método jmsListenerContainerFactory é responsável por criar nossa instância DefaultJmsListenerContainerFactory que implementa a JmsListenerContainerFactory. DefaultJmsListenerContainerFactory que fica responsável por escutar mensagens das filas, no nosso caso, das filas que criarmos na nosso serviço da AWS.
  4. JmsTemplate é utilizado para que possamos utilizar métodos para produzirmos mensagens em determinadas fila da SQS.

Lembrando que nossa classe utiliza as annotations que serão utilizadas pelo injetor de depêndencia do spring para realizar a criação dos nossos beans no contexto da nossa aplicação.

Método responsável por escutar uma mensagem da fila de validação de pedido

Através da anotation@JmsListener “, nosso método consegue escutar todas as mensagens produzidas na fila “order-validator”, que é uma fila criada no serviço simples de fila da AWS. Após receber uma mensagem com o conteúdo da compra, é feita uma validação simples respondendo para a fila de finalização de compra, através do método sendMessageToOrderFinisher, para que a compra seja finalizada de acordo com seu status, inválida (possível fraude) ou válida (compra será efetuada).

Método responsável por produzir uma mensagem na fila de finalização da compra

O método acima é responsável por utilizar o JmsTemplate para enviar uma mensagem na fila order-finisher para que a compra possa ser finalizada.

Método que escuta nossa mensagem na fila de finalização de pedido

O método acima é responsavél por escutar uma mensagem da fila order-finisher e realizar a finalização de acordo com o status. O ideal para esse caso é criar outro serviço que lide com a finalização de uma compra, o método acima foi construído para conseguimos visualizar a mensagem a produzida pelo serviço de order-validator.

Enviando mensagem na fila e verificando log da aplicação

Enviando mensagem na fila da SQS.

Através do console da AWS, iremos enviar a mensagem acima para nossa aplicação, e nossa aplicação irá validar se a ordem de comprar é válida ou não.

Após o envio da mensagem acima na fila da SQS, nossa aplicação realizará os seguintes passos:

1. Nossa aplicação irá logar as informações recebidas na fila order-validator (primeiro log)

2. Irá validar e enviar a mensagem para a fila order-finisher (segundo log)

3. E por fim mostrar a mensagem recebida na fila order-finisher, mostrando o status da compra (terceiro log).

Resposta da aplicação mostrando os logs apontando o sucesso do nosso tutorial.

--

--