You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
Groovy
65 lines
1.5 KiB
Groovy
11 years ago
|
package org.test
|
||
|
|
||
|
import java.util.concurrent.CountDownLatch
|
||
|
|
||
|
@Log
|
||
|
@Configuration
|
||
|
@EnableRabbitMessaging
|
||
|
class RabbitExample implements CommandLineRunner {
|
||
|
|
||
|
private CountDownLatch latch = new CountDownLatch(1)
|
||
|
|
||
|
@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")
|
||
|
latch.await()
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
@Log
|
||
|
class Receiver {
|
||
|
CountDownLatch latch
|
||
|
|
||
|
def receive(String message) {
|
||
|
log.info "Received ${message}"
|
||
|
latch.countDown()
|
||
|
}
|
||
|
}
|