28个案例问题分析---16---消息队列的作用和意义--rabbitmq-爱代码爱编程
背景
之前项目里使用过rabbitmq,但是没有系统的总结过,今天就专门总结一下rabbitmq的好处和意义,并且附上一个小例子。展示一下rabbitMq的简单应用
相关知识
概念:什么是MQ
MQ(Message Queue)消息队列。队列是一种基础的数据结构。具有先进先出的特性,用队列来实现消息的传递。生产者生产消息,将消息放入队列。消费者从队列取出消息(服务端推送,或者订阅),进行消费。
MQ的优缺点
MQ有三大优点:
- 解耦
如果我们一个业务需要依赖多个模块共同实现。利用MQ,我们只需要在主业务完成之后发送一条MQ消息即可。主业务和其他业务之间,没有强耦合关系。 - 异步
主业务执行完毕之后,就可以返回给前端。从业务进行异步执行,没有必要让用户进行等待。降低业务响应时间,提升用户的体验。 - 削峰
高并发的情况下,通过队列来存储消息,消息对应的业务异步进行处理,避免在流量峰值到来的时候造成系统瘫痪。
MQ有三大缺点: - 系统依赖的服务多。
- 系统复杂性提高。(消息丢失?消息重复消费?消息顺序?)
- 业务一致性。主业务与从业务是否一致
如何使用rabbitmq
这里我们就实现简单的在springCloud项目中使用rabbitMq的例子。
- 引入依赖
<!-- amqp依赖,包含RabbitMQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
-
添加rabbitMq配置
-
编写消息生产者
-
编写消息消费者
-
测试
提供一个test接口用来测试
@Autowired
private SpringMqProduceTest springMqProduceTest;
@GetMapping("testMq/{message}")
public String testMq(@PathVariable("message") String message){
springMqProduceTest.testSimpleQueue("testMq",message);
return "已发送:"+message;
}
执行效果:
调用接口
控制台输出
总结&提升
通过总结rabbitMQ的使用,体会MQ消息队列的作用,通过这个队列可以让我们代码耦合度更小。理解MQ的好处才能在以后的工作中更好的使用这门技术。