@ -4,7 +4,7 @@ import java.util.concurrent.CountDownLatch
@Log
@Configuration
@EnableRabbit Messaging
@EnableRabbit
class RabbitExample implements CommandLineRunner {
private CountDownLatch latch = new CountDownLatch ( 1 )
@ -12,52 +12,21 @@ class RabbitExample implements CommandLineRunner {
@Autowired
RabbitTemplate rabbitTemplate
private String queueName = "spring-boot"
@Bean
Queue queue ( ) {
new Queue ( queueName , false )
}
@Bean
TopicExchange exchange ( ) {
new TopicExchange ( "spring-boot-exchange" )
}
/ * *
* The queue and topic exchange cannot be inlined inside this method and have
* dynamic creation with Spring AMQP work properly .
* /
@Bean
Binding binding ( Queue queue , TopicExchange exchange ) {
BindingBuilder
. bind ( queue )
. to ( exchange )
. with ( "spring-boot" )
}
@Bean
SimpleMessageListenerContainer container ( CachingConnectionFactory connectionFactory ) {
return new SimpleMessageListenerContainer (
connectionFactory: connectionFactory ,
queueNames: [ queueName ] ,
messageListener: new MessageListenerAdapter ( new Receiver ( latch: latch ) , "receive" )
)
}
void run ( String . . . args ) {
log . info "Sending RabbitMQ message..."
rabbitTemplate . convertAndSend ( queueName , "Greetings from Spring Boot via RabbitMQ" )
rabbitTemplate . convertAndSend ( "spring-boot" , "Greetings from Spring Boot via RabbitMQ" )
latch . await ( )
}
}
@Log
class Receiver {
CountDownLatch latch
@RabbitListener ( queues = 'spring-boot' )
def receive ( String message ) {
log . info "Received ${message}"
latch . countDown ( )
}
}
@Bean
Queue queue ( ) {
new Queue ( "spring-boot" , false )
}
}