Arquitetura de mensageria com RabbitMQ 3.6.1 (protcolo AMQP) e spring boot 1.3.3.
Maven 3.3.3, java 8, spring boot 1.3.3 (spring-boot-starter-amqp) e lombok 1.16.6.
mvn spring-boot:run
Para publicar mensagem na fila e consumir basta acessar: http://localhost:8080/filas/1
Para instalar o RabbitMQ 3.6.1 é recomendável usar o homebrew e seguir os passos:
- brew update
- brew install rabbitmq
Para iniciar, parar ou ver status do serviço do RabbitMQ:
- /usr/local/sbin/rabbitmq-server
- /usr/local/sbin/rabbitmqctl stop
- /usr/local/sbin/rabbitmqctl status
Após instalar, ativar o plugin que dá acesso ao console web de gerenciamento do RabbitMQ:
- /usr/local/sbin/rabbitmq-plugins enable rabbitmq_management
- http://localhost:15672 (padrão é guest/guest)
Configurar:
- Criar virtual host chamado dev01_iworks e usuário e senha dev_iworks que tenha acesso ao virtual host
No arquivo application.properties colocar as entradas:`
spring.rabbitmq.addresses=localhost:5672
spring.rabbitmq.username=dev_iworks
spring.rabbitmq.password=dev_iworks
spring.rabbitmq.virtual-host=dev01_iworks
As configurações de exchange, routing key e queue ficam na classe RabbitMQConfiguration.java que faz o binding configurando as filas no RabbitMQ.
Assim, tem-se as seguintes configurações:
- Exchange: "iworks-exchange-cadastro" -> 2 Routing Keys: "works-routerkey-cadastro", "works-routerkey-complemento" -> 1 fila: iworks-fila-cadastro"
- Exchange: "iworks-exchange-imagem" -> 1 Routing Key: "iworks-routerkey-imagem", "works-routerkey-complemento" -> 1 fila: "iworks-fila-imagem"
- Para produzir uma mensagem na fila basta:
@Autowired
private RabbitTemplate rabbitTemplate;
@Value("${exchange.cadastro}")
private String exchangeCadastro;
@Value("${routerkey.cadastro}")
private String routerKeyCadastro;
public void send() {
rabbitTemplate.convertAndSend(exchangeCadastro, routerKeyCadastro, dto);
}
- Para escutar uma mensagem na fila basta:
@RabbitLstener(queues = "${fila.cadastro}")
public void receive(Message mensagem) {}