Skip to content

Entender o conceito de circuitbreaker e implementá-lo utilizando Resilience4j e Spring Boot.

Notifications You must be signed in to change notification settings

cbbathaglini/circuit-breaker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Implementando o Circuit breaker - API de Produtos e API de Avaliações

Objetivo principal: Entender o conceito de circuitbreaker e implementá-lo utilizando Resilience4j e Spring Boot.
Obs: Produtos e avaliações são salvos no banco de dados MariaDB.

O que você vai precisar?

- Docker

Rodando: Passo a passo

1) Rodar a linha abaixo.
docker-compose up

Vai criar um container e subir a imagem do banco de dados MariaDB, esse banco vai estar exposto na porta 3307.

  1. Rodar o ProdutosApplication
  2. Rodar a AvalicaoApplication
  3. Cadastrar alguns produtos e algumas avaliações
  4. Parar a aplicação de avaliação
  5. Testar com ids de produtos diferentes a request 3
  6. Alguns casos vão cair no cache e em outros será retornado o erro 500
  7. Observar os logs no console informando que o circuitbreaker está aberto, fechado ou meio-aberto Figura 1 No application.properties foram definidas as seguintes propriedades:
resilience4j.circuitbreaker.instances.avaliacoesProdutoCB.baseConfig=default
resilience4j.circuitbreaker.configs.default.minimumNumberOfCalls=4
resilience4j.circuitbreaker.configs.default.slidingWindowSize=8

Elas informam que quando 4 chamadas forem feitas, através do método que possui o circuitbreaker annotation 'avaliacoesProdutoCB', e essas chamadas não obtiverem resposta da outra API o circuitbreaker será fechado.

O método que chama a API de avaliações está na classe 'AvaliacoesDoProdutoService.java' e o método é o getAllAvaliacoes.

@CircuitBreaker(name="avaliacoesProdutoCB", fallbackMethod = "getAllAvaliacoesNoCache")
public List<Avaliacao> getAllAvaliacoes(Long idProduto) throws Exception {
    //....
}

Requests

1) Cadastrar produto
curl --request POST \
  --url http://localhost:8088/produto \
  --header 'Content-Type: application/json' \
  --header 'User-Agent: insomnia/8.3.0' \
  --data '{
	"nome":"Produto 1"
}'
  1. Cadastrar avaliação
curl --request POST \
  --url http://localhost:8089/avaliacoes \
  --header 'Content-Type: application/json' \
  --header 'User-Agent: insomnia/8.3.0' \
  --data '{
	"nota": 2,
	"descricao": "descricao aqui",
	"idProduto": 1
}'
  1. Listar todas as avaliações do produto de id=1
curl --request GET \
  --url http://localhost:8088/produtos/1/avaliacoes \
  --header 'User-Agent: insomnia/8.3.0'

Links úteis

- Documentação do Resilience4j: https://resilience4j.readme.io/docs/circuitbreaker
- Para a dependência do Resilience4j: https://mvnrepository.com/artifact/io.github.resilience4j/resilience4j-spring-boot2
- Para a dependência do actuator: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator
- Para a dependência do Spring AOP: https://mvnrepository.com/artifact/org.springframework/spring-aop

About

Entender o conceito de circuitbreaker e implementá-lo utilizando Resilience4j e Spring Boot.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages