RabbitMq入门
RabbitMq入门-队列
官网地址
https://www.rabbitmq.com
参考文档
https://www.rabbitmq.com/tutorials/tutorial-one-java.html
1.队列-queque,基于springboot实现一个简单的例子
RabbitMq入门-简单使用
上图是该demo的结构图
producer 负责生产消息,把消息发送到队列中
queue 队列,负责存储接收,分发队列消息
customer 消费者,负责接收消费消息
具体实现如下,先在pom.xml中引入rabbitmq的依赖(建一个springboot工程这些就不说了)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
创建一个queue(定义个名称叫order的bean)
@Bean
public Queue orderQueue() {
return new Queue("order");
}
这样就完成了对queue的创建
接着创建一个生产者(创建一个类OrderSender)
定义生产者
@Component
public class OrderSender {
@Autowired
private AmqpTemplate rabbitTemplate;
private final static String routeKey="order";
public void send() {
String context = "create an order " + new Date();
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend(routeKey, context);
}
}
这里说一下routeKey的作用,这里的routeKey其实就是队列的名称,通过这个routeKey参数绑定到name为order的队列(queue)中去
同理也创建一个消费者
@RabbitHandler
public void process(String msg) {
System.out.println("Receiver : " + msg);
engineService.saveOrder();
}
@RabbitListener(queues = “order”)
这个注解让消费者绑定到了order队列中
@RabbitHandler 是标注接收队列消息的处理方法,这里可以执行具体的业务代码,就比如我这里执行了一个生成订单的代码。
生产者-队列-消费者 都定义好之后,还需要一个执行调用生产者的方法,我简单的写了一个调用的controller进行调用
启动项目,启动完成后取rabbitmq的控制台看看
可以看到上面已经生成了order的队列,点进去看一下
因为我启动了两个实例,可以看到,这个队列有两个消费者
去浏览器执行一下 http://127.0.0.1:8080/queue
查看两个消费者的控制台
实例1的控制台
实例2的控制台
多试几次
发现各自的控制台依次输出如下
实例1的控制台实例2的控制台
这说明了在这种模式下,一个消息只能被一个消费者实例消费,且RabbitMQ默认用轮询的方式把消息分发给实例,最后补个图吧