O Spring Framework fornece amplo suporte para integração com sistemas de mensagens, desde o uso simplificado da API JMS JmsTemplate
até uma infraestrutura completa para receber mensagens de forma assíncrona. O Spring AMQP fornece um conjunto de recursos semelhante para o Advanced Message Queuing Protocol. O Spring Boot também fornece opções de configuração automática para RabbitTemplate
e RabbitMQ. O Spring WebSocket inclui nativamente suporte para mensagens STOMP, e o Spring Boot tem suporte para isso por meio de iniciadores e uma pequena quantidade de configuração automática. O Spring Boot também tem suporte para Apache Kafka.
AMQP
O Advanced Message Queuing Protocol (AMQP) é um protocolo de nível de fio neutro de plataforma para middleware orientado a mensagens. O Spring Boot oferece várias conveniências para trabalhar com AMQP por meio do RabbitMQ, incluindo o spring-boot-starter-amqp
“Starter”.
RabbitMQGenericName
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=secret
spring.rabbitmq.addresses=amqp://admin:secret@localhost
Enviando uma mensagem
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final AmqpAdmin amqpAdmin;
private final AmqpTemplate amqpTemplate;
public MyBean(AmqpAdmin amqpAdmin, AmqpTemplate amqpTemplate) {
this.amqpAdmin = amqpAdmin;
this.amqpTemplate = amqpTemplate;
}
public void someMethod() {
this.amqpAdmin.getQueueInfo("someQueue");
}
public void someOtherMethod() {
this.amqpTemplate.convertAndSend("hello");
}
}
Enviando uma mensagem para um stream
spring.rabbitmq.stream.name=my-stream
Recebendo uma mensagem
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
@RabbitListener(queues = "someQueue")
public void processMessage(String content) {
// ...
}
}
Apache Kafka
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=myGroup
Enviando uma mensagem
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final KafkaTemplate<String, String> kafkaTemplate;
public MyBean(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void someMethod() {
this.kafkaTemplate.send("someTopic", "Hello");
}
}
Recebendo uma mensagem
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
@KafkaListener(topics = "someTopic")
public void processMessage(String content) {
// ...
}
}
WebSockets
O Spring Boot fornece configuração automática de WebSockets para Tomcat, Jetty e Undertow incorporados. Se você implantar um arquivo war em um contêiner autônomo, o Spring Boot assume que o contêiner é responsável pela configuração de seu suporte a WebSocket.
Referências:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#messaging