Hello World Demo
首先 RabbitMQ 分为3部分,生产端,消费者,RabbitMQ端。其中又有4个重要的概念:_虚拟机,交换机,队列 和绑定_。
所以我们需要写 :
- 生产端:即生产者到RabbitMQ的连接,以及消息的发送。
- 消费端:即消费者对RabbitMQ的监听以及消息的接受。
- RabbitMQ部分:即定义队列,定义交换机,以及定义队列和交换机的绑定。
如下代码:
定义队列
@Bean
Queue queue() {
return new Queue(queueName, false);
}
定义交换机
@Bean
TopicExchange exchange() {
return new TopicExchange("spring-boot-exchange");
}
这里定义了 Topic 类型的交换机,同样的也可以定义其他类型。
定义绑定
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(queueName);
}
由下图可以知,交换机与队列之间是有一个绑定关系,根据绑定的关系,我们才能把消息准确的通过交换机发送到队列中。
定义 ConnectionFactory
ConnectionFactory 的意义在于,我们可以在这里设置 Rabbitmq的地址,端口,用户名,密码,虚拟机等等基本信息,然后再把该 ConnectionFactory 注入到 生产者和消费者中,_这样就完成了 消费者和生产者到 RabbitMQ的连接_。如下代码:
@Bean
ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("127.0.0.1", 5672);
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
connectionFactory.setPublisherConfirms(true); // enable confirm mode
return connectionFactory;
}
定义消费者监听RabbitMQ队列
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
Receiver receiver() {
return new Receiver();
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
public class Receiver {
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
MessageListenerAdapter 作用,参考:点这里
定义生产者
@RestController
public class Producer {
@Autowired
RabbitTemplate rabbitTemplate;
@RequestMapping(value = "/test/{abc}",method = RequestMethod.GET)
public String test(@PathVariable(value = "abc") String abc){
rabbitTemplate.convertAndSend("spring-boot-exchange","spring-boot", abc + " from RabbitMQ!");
return "abc";
}
}
RabbitTemplate 是 spring 帮我们的一个封装,我们使用该对象提供的方法即可发送消息。默认情况下 RabbitTemplate 连接本机的 5672 端口的 rabbitmq,如果需要连接其他地方,那么我们可以自己重写 RabbitTemplate 的生成,再注入使用即可。
以上便是 RabbitMQ 的 Hello World Demo,具体完整代码可以参考:点这里