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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
消息中间件 网络协议 JavaScript
MQTT常见问题之微消息队列mqtt支持ipv6失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
消息中间件 物联网 Java
MQTT常见问题之微消息队列配置失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
消息中间件 Java
springboot整合消息队列——RabbitMQ
springboot整合消息队列——RabbitMQ
76 0
|
1天前
|
消息中间件 存储 运维
深入理解MQ消息队列的高可用与可靠性策略
深入理解MQ消息队列的高可用与可靠性策略
11 3
|
17天前
|
消息中间件 大数据 Java
消息队列 MQ
消息队列 MQ
24 3
|
21天前
|
消息中间件 数据安全/隐私保护
MQTT微消息队列服务器连接报错:Error: Connection refused: Not authorized
使用MQTTX工具进行测试时,通过AccessKey创建了Client ID的用户名和密码。配置了公网接入点及端口1883,但尝试连接时出现错误。已附上工具截图:![](https://ucc.alicdn.com/pic/developer-ecology/3byii5uar64gg_36327474e991439da422f38c450ef153.png)。确认过用户名、密码和Client ID无误,问题仍未解决,期待回复!
|
27天前
|
消息中间件 微服务
RabbitMQ入门指南(四):交换机与案例解析
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了交换机在RabbitMQ中的作用与类型、交换机案例(Fanout交换机、Direct交换机、Topic交换机)等内容。
38 0
|
1月前
|
消息中间件 存储 监控
解析RocketMQ:高性能分布式消息队列的原理与应用
RocketMQ是阿里开源的高性能分布式消息队列,具备低延迟、高吞吐和高可靠性,广泛应用于电商、金融等领域。其核心概念包括Topic、Producer、Consumer、Message和Name Server/Broker。RocketMQ支持异步通信、系统解耦、异步处理和流量削峰。关键特性有分布式架构、顺序消息、高可用性设计和消息事务。提供发布/订阅和点对点模型,以及消息过滤功能。通过集群模式、存储方式、发送和消费方式的选择进行性能优化。RocketMQ易于部署,可与Spring集成,并与Kafka等系统对比各有优势,拥有丰富的生态系统。
148 4
|
1月前
|
消息中间件 存储 负载均衡
消息队列学习之RabbitMQ
【4月更文挑战第3天】消息队列学习之RabbitMQ,一种基于erlang语言开发的流行的开源消息中间件。
19 0
|
2月前
|
消息中间件 存储 中间件
【SpringCloud Stream消息驱动、设计思想以及整合rabbitmq消息队列案例--学习笔记】
【SpringCloud Stream消息驱动、设计思想以及整合rabbitmq消息队列案例--学习笔记】
59 0