The messaging integration in Spring Boot provides comprehensive auto-configuration for various message brokers and protocols. This system abstracts connection details, simplifies the creation of templates and listener containers, and provides seamless integration with testing infrastructure like Testcontainers and Docker Compose.
Spring Boot uses the ConnectionDetails interface hierarchy to decouple the application from the specific source of connection parameters (e.g., static properties, Docker Compose, or Testcontainers).
| Broker | Connection Details Interface | Implementation |
|---|---|---|
| RabbitMQ | RabbitConnectionDetails | PropertiesRabbitConnectionDetails |
| Rabbit Stream | RabbitStreamConnectionDetails | PropertiesRabbitStreamConnectionDetails |
| Kafka | KafkaConnectionDetails | PropertiesKafkaConnectionDetails |
For example, RabbitStreamConnectionDetails provides the host, port, and credentials required for the RabbitMQ Stream plugin module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitStreamConnectionDetails.java23-53
Spring Boot provides automatic discovery of connection details when using Testcontainers or Docker Compose.
RabbitContainerConnectionDetailsFactory and RabbitStreamContainerConnectionDetailsFactory create connection details from running containers during tests module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/testcontainers/RabbitContainerConnectionDetailsFactory.java33-35 module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/testcontainers/RabbitStreamContainerConnectionDetailsFactory.java33-35RabbitStreamDockerComposeConnectionDetailsFactory extracts connection information from services defined in docker-compose.yml module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitStreamDockerComposeConnectionDetailsFactory.java32-34Sources: module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitStreamConnectionDetails.java23-53 module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/testcontainers/RabbitContainerConnectionDetailsFactory.java33-35 module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/testcontainers/RabbitStreamContainerConnectionDetailsFactory.java33-35 module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitStreamDockerComposeConnectionDetailsFactory.java32-34
Auto-configuration for Apache Kafka is managed by KafkaAutoConfiguration. It sets up the core infrastructure including KafkaTemplate, ConsumerFactory, and ProducerFactory.
The following diagram illustrates the relationship between properties, connection details, and the resulting Kafka beans.
Kafka Auto-Configuration Logic
kafkaTemplate: Configures a KafkaTemplate for sending messages. It automatically associates a RecordMessageConverter and KafkaTemplateObservationConvention if present module/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java105-122kafkaConsumerFactory: Creates a DefaultKafkaConsumerFactory using properties built from KafkaProperties and overrides from KafkaConnectionDetails module/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java131-139@EnableKafkaStreams. Spring Boot auto-configures KafkaStreamsConfiguration and StreamsBuilderFactoryBean documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/messaging/kafka.adoc61-65Sources: module/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java90-148 documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/messaging/kafka.adoc4-81 module/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaProperties.java64-229
Spring Boot supports both standard AMQP and the RabbitMQ Stream plugin.
RabbitAutoConfiguration initializes the CachingConnectionFactory, RabbitTemplate, and AmqpAdmin module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitAutoConfiguration.java133-145
spring.rabbitmq.template.retry.enabled documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/messaging/amqp.adoc64-74RabbitTemplateObservationConvention if a bean is available module/spring-boot-amqp/src/test/java/org/springframework/boot/amqp/autoconfigure/RabbitAutoConfigurationTests.java74-75Configured via RabbitStreamConfiguration, this module provides support for the high-performance Stream plugin.
rabbitStreamEnvironment: Configures the com.rabbitmq.stream.Environment required for stream operations module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitStreamConfiguration.java92-101rabbitStreamTemplate: Auto-configured when spring.rabbitmq.stream.name is set, allowing for stream-specific message production module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitStreamConfiguration.java119-128Sources: module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitAutoConfiguration.java133-145 module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitStreamConfiguration.java92-128 documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/messaging/amqp.adoc64-74
RSocket support is split between strategy configuration and messaging infrastructure.
RSocketStrategiesAutoConfiguration: Configures encoders and decoders (e.g., JSON, CBOR) into an RSocketStrategies bean module/spring-boot-rsocket/src/main/java/org/springframework/boot/rsocket/autoconfigure/RSocketStrategiesAutoConfiguration.java46-51RSocketMessagingAutoConfiguration: Configures the RSocketMessageHandler which handles @MessageMapping annotations module/spring-boot-rsocket/src/main/java/org/springframework/boot/rsocket/autoconfigure/RSocketMessagingAutoConfiguration.java49-56RSocket Component Interaction
Sources: module/spring-boot-rsocket/src/main/java/org/springframework/boot/rsocket/autoconfigure/RSocketStrategiesAutoConfiguration.java46-51 module/spring-boot-rsocket/src/main/java/org/springframework/boot/rsocket/autoconfigure/RSocketMessagingAutoConfiguration.java49-56 module/spring-boot-rsocket/src/test/java/org/springframework/boot/rsocket/autoconfigure/RSocketMessagingAutoConfigurationTests.java59-105
WebSocket messaging auto-configuration (WebSocketMessagingAutoConfiguration) is focused on STOMP-based messaging over WebSockets within a Servlet environment module/spring-boot-websocket/src/main/java/org/springframework/boot/websocket/autoconfigure/servlet/WebSocketMessagingAutoConfiguration.java61-66
JacksonJsonMessageConverter if JsonMapper is on the classpath module/spring-boot-websocket/src/main/java/org/springframework/boot/websocket/autoconfigure/servlet/WebSocketMessagingAutoConfiguration.java85-103applicationTaskExecutor with the message broker if available module/spring-boot-websocket/src/main/java/org/springframework/boot/websocket/autoconfigure/servlet/WebSocketMessagingAutoConfiguration.java159-165stompWebSocketHandlerMapping from lazy initialization via LazyInitializationExcludeFilter to ensure WebSocket endpoints are registered correctly on startup module/spring-boot-websocket/src/main/java/org/springframework/boot/websocket/autoconfigure/servlet/WebSocketMessagingAutoConfiguration.java68-71Sources: module/spring-boot-websocket/src/main/java/org/springframework/boot/websocket/autoconfigure/servlet/WebSocketMessagingAutoConfiguration.java61-172 module/spring-boot-websocket/src/test/java/org/springframework/boot/websocket/autoconfigure/servlet/WebSocketMessagingAutoConfigurationTests.java118-149
Spring Boot continues to support traditional messaging systems:
ConnectionFactory and JmsTemplate.PulsarTemplate and listener container factories.JmsAutoConfiguration.All these modules follow the same pattern:
ConfigurationProperties to a broker-specific ConnectionFactory.Template for sending (e.g., JmsTemplate).ListenerContainerFactory for receiving via @JmsListener or similar annotations.Sources: module/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java90-148 module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/autoconfigure/RabbitAutoConfiguration.java133-145
Refresh this wiki