28个案例问题分析---16---消息队列的作用和意义--RabbitMq

简介: 28个案例问题分析---16---消息队列的作用和意义--RabbitMq

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时,能够深入理解其作用,充分发挥其优势。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
80 5
|
1月前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
2月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
76 8
|
2月前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
2月前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
2月前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
69 4
|
3月前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
52 1
|
2月前
|
消息中间件 监控 测试技术
云消息队列RabbitMQ实践 - 评测
根据反馈,对本解决方案的实践原理已有一定理解,描述整体清晰但需在消息队列配置与使用上增加更多示例和说明以助理解。部署体验中获得了一定的引导和文档支持,尽管文档仍有待完善;期间出现的配置文件错误及依赖库缺失等问题已通过查阅资料解决。设计验证展示了云消息队列RabbitMQ的核心优势,包括高可用性和灵活性,未来可通过增加自动化测试来提高系统稳定性。实践后,用户对方案解决问题的能力及适用场景有了明确认识,认为其具有实际生产价值,不过仍需在性能优化、安全性增强及监控功能上进行改进以适应高并发和大数据量环境。
44 0
|
5月前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。