MQ的作用
一:背景
在项目中使用 RabbitMQ 消息队列,但没有进行系统的总结。本文将总结 RabbitMQ 的优点和意义,并提供一个简单的使用示例。
二: 相关知识
2.1:什么是MQ
MQ是Message Queue的缩写,翻译成中文就是消息队列。它是一种基础的数据结构,具有先进先出(FIFO)的特性,用于在分布式系统中传递消息。生产者将消息放入队列,消费者从队列中取出消息并进行消费。MQ被广泛应用于各种领域,例如电商、金融、物流、游戏等,可以用于异步消息通信、任务队列、分布式系统解耦、流量削峰等方面。通过MQ可以实现系统之间的松耦合,提高系统的可扩展性和可靠性。常见的MQ系统有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。
本文我们以RabbitMQ为例!
2.2:什么是RabbitMQ
RabbitMQ是一种开源的、高度可靠的消息代理和队列系统。它实现了AMQP(Advanced Message Queuing Protocol)标准,可以轻松地在应用程序之间传递和存储消息,并且支持多种编程语言。RabbitMQ的基本原理是发布订阅模式,消息发布者将消息发送到交换机(Exchange),交换机根据不同的路由规则将消息分发到一个或多个队列(Queue),然后消息消费者可以从队列中取出消息进行处理。
2.3:MQ的优缺点
2.3.1 MQ三大优点
解耦
如果我们一个业务需要依赖多个模块共同实现。利用MQ,我们只需要在主业务完成之后发送一条MQ消息即可。
利用消息队列,主业务完成后只需发送一条消息即可,没有强耦合关系。
异步
主业务执行完毕之后,就可以返回给前端。主业务执行完成后就可以返回给前端,从业务进行异步执行,降低业务响应时间,提升用户体验。
削峰
高并发的情况下,通过队列来存储消息,消息对应的业务异步进行处理,避免在流量峰值到来的时候造成系统瘫痪。
2.3.2 MQ的三大缺点
MQ(Message Queue)是一种异步通信方式,它可以将消息发送者和接收者解耦,提高系统的可伸缩性、可靠性和可维护性。然而,MQ也有一些缺点:
1.系统依赖的服务多:使用MQ需要引入相关的消息中间件,例如ActiveMQ、RabbitMQ、Kafka等,这些中间件需要运行在独立的服务器上,增加了系统的复杂度和维护成本。
2.系统复杂性提高:使用MQ后,系统的复杂度会提高,需要考虑消息的可靠性、消息的丢失和消息的重复消费等问题。例如,如果消息中间件宕机或网络故障,可能导致消息丢失或重复消费,需要通过配置和代码实现消息的可靠性和幂等性。
3.业务一致性:在分布式系统中,使用MQ可能会带来业务一致性的问题。例如,当主业务和从业务同时处理同一个消息时,如果主业务处理成功而从业务处理失败,可能导致业务出现不一致的情况。需要通过设计良好的业务逻辑和消息处理机制来解决这个问题。
2.4:如何使用rabbitmq
以下是一个简单的 Spring Cloud 项目中使用 RabbitMQ 的示例。
2.4.1 引入pom依赖
在 pom 文件中引入对应的依赖,包括 amqp 和 RabbitMQ:
<!-- amqp依赖,包含RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2.4.2 添加rabbitMq配置
在配置文件内添加rabbitMq配置:
2.4.3 编写消息生产者
通过依赖注入的方式,注入RabbitTemplate的对应对象。并且编写一个消息的生产者。
2.4.4 编写消息消费者
定义对应的消息消费者,监听消息队列
2.4.5 测试代码
2.4.5.1 提供一个test接口进行测试
提供一个test接口用来测试:
@Autowired private SpringMqProduceTest springMqProduceTest; @GetMapping("testMq/{message}") public String testMq(@PathVariable("message") String message){ springMqProduceTest.testSimpleQueue("testMq",message); return "已发送:"+message; }
2.4.5.2 对应的执行效果
调用接口,进行测试
控制台输出
三: 总结&提升
通过总结rabbitMQ的使用,我们可以更好地理解MQ消息队列的作用和优缺点。通过队列的使用,可以实现业务之间的解耦、异步和削峰,从而提高系统的可靠性和性能。
在使用rabbitMQ时,需要注意消息丢失、消息重复消费、消息顺序和业务一致性等问题。为了避免这些问题,可以在消息生产者和消费者中添加相应的处理逻辑。
在具体实现上,我们可以通过引入amqp依赖来使用RabbitMQ。在SpringCloud项目中,可以通过注入RabbitTemplate对象来实现消息的生产者。同时,也需要定义对应的消息消费者,监听消息队列并进行处理。
总的来说,理解MQ的好处可以在以后的工作中更好的使用这门技术。希望大家在学习使用rabbitMQ时,能够深入理解其作用,充分发挥其优势。