点击“蓝字”关注我们吧
前言
RabbitMQ官网提供了七种队列模型,分别是:简单队列、工作队列、发布订阅、路由模式、主题模式、RPC模式,因为RPC模式不是MQ,所以文章系列中不会介绍RPC模式了。
那么接下来的几篇文章一起来看看这几种队列模式,本篇文章为简单队列模式
简单队列模式
什么是简单队列模式
简单队列模式从字面上理解,乍看就是一种非常简单的队列模式,其实实际也是如此,该队列模式分为两种角色,一个是消息生产者,另外一个是消息消费者,最后还有一个队列,俗称点对点模式。
功能介绍
功能描述:一个生产者 "P" 发送消息到 "Q" 队列 由消费者 "C" 接受消息
P:生产者、红色:队列(可以缓存消息)、C:消费者
代码演示
本文是基于SpringBoot框架去集成的RabbitMQ,所以最好会SpringBoot基础,再跟着本文一起大家简单队列Demo
创建一个简单的maven项目
导入依赖
首先在我的父工程 pom.xml 导入maven依赖
代码语言:javascript复制<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version></parent>
<dependencies> <!-- 添加springboot对amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency></dependencies>
生产者
生产者项目结构
pom文件
代码语言:javascript复制<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
yml文件
代码语言:javascript复制server: port: 8081
spring: rabbitmq: ####连接地址 host: 192.168.137.5 ####端口号 port: 5672 ####账号 username: sunny ####密码 password: sunny ### 交换机 virtual-host: /sunny_vm
生产者配置类
代码语言:javascript复制@Componentpublic class RabbitMqConfig {
/** * 队列名称 */ public static final String QUEUE_NAME = "sunny_simple_queue"; @Bean public Queue simpleQueue() { return new Queue(QUEUE_NAME); }}
生产者发送消息
代码语言:javascript复制@RestControllerpublic class ProducerController {
@Autowired private RabbitTemplate rabbitTemplate;
@GetMapping("/send") public void send(){ String message = "sunny发送爱心小礼包消息";
rabbitTemplate.convertAndSend(QUEUE_NAME, message);
System.out.println("生产者发送消息我:" message "成功"); }}
在简单队列模型中,发送消息的时候是不需要指定交换机的名称,它会将消息发送到"默认交换机"上,默认的Exchange不进行Binding操作,任何发送到该Exchange的消息都会被转发到"Queue名字和Routing key相同的队列"中,如果vhost中不存在和Routing key同名的队列,则该消息会被抛弃。
这里我们在发送消息的时候设置的Routing key为"sunny_simple_queue",那么就会将消息发送到队列名字为"sunny_simple_queue"的队列上去。
生产者测试发送消息
打开浏览器,访问指定网址
代码语言:javascript复制http://localhost:8081/send
登陆Mangerment界面,可以看到队列中阻塞了一条消息未消费
消费者
消费者项目结构
yml文件
代码语言:javascript复制spring: rabbitmq: ####连接地址 host: 192.168.137.5 ####端口号 port: 5672 ####账号 username: sunny ####密码 password: sunny ### 交换机 virtual-host: /sunny_vm
server: port: 8080
消费类
代码语言:javascript复制@Component@RabbitListener(queues = "sunny_work_queue")public class ConsumerTwoController {
/** * @RabbitListener 和 @RabbitHandler 搭配使用 * 可以标注在类上面,需配合 @RabbitHandler 注解一起使用 * 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理, * 具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型 **/ @RabbitHandler public void accept(String message) { System.out.println("消费者接受消息:" message "成功"); }
}
启动消费者项目,项目启动后会自动消费消息
队列中积压的消息被成功消费
到此SpringBoot整合RabbitMQ实现简单队列代码Demo就结束拉
总结
简单队列也称为点对点,即一个生产者对应一个消费者,生产者发送消息到队列,消费者在队列中取出消息消费。
我是黎明大大,我知道我没有惊世的才华,也没有超于凡人的能力,但毕竟我还有一个不屈服,敢于选择向命运冲锋的灵魂,和一个就是伤痕累累也要义无反顾走下去的心。
●Redis哨兵架构搭建以及详解
●Redis主从架构的搭建
●深入理解Redis的持久化机制
●Redis集群搭建及原理解剖
●我们所了解的Redis分布式锁真的就万无一失吗?
●手把手教你如何在CentOS7环境下安装部署Redis
●Spring5.0源码深度解析之Spring是如何利用三级缓存解决循环依赖的问题