使用IDEA开发RabbitMQ教程系列(一) 初识RabbitMQ

本文探讨了在开发项目中遇到的耗时操作问题,引入了RabbitMQ这一高级消息队列协议的实现,详细解释了其在系统中如何通过异步处理提升效率。深入解析了RabbitMQ的基本概念,包括ConnectionFactory、Connection、Channel、Exchange、RoutingKey、Queue、Binding、ExchangeTypes、Producer和Consumer,为初学者提供了全面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目问题

在我们开发项目过程中,我们在进行某些耗时操作的时候,我们需要等待操作完成返回结果,再执行下一步操作;
举个栗子(我们模拟一个需求,不考虑采用异步回调的情况)
1、用户在系统进行了一个在线话费充值的操作;
2、系统收到用户的订单往运营商空充接口进行提单操作;
2、运营商空充接口返回充值成功或失败处理信息;
3、系统对用户进行成功/失败(返款)操作
那么过程中产生的问题就是:运营商接口返回过程如果非常耗时,那么程序此时是需要一直等待接口的返回数据以便一下步对用户充值成功或失败的操作;
模拟的解决思路
我们是否可以将一些无需即时返回且耗时的操作提取出来进行异步处理;
1、用户下单后只需要知道下单是否成功;
2、系统会读取用户订单信息往运营商空充接口进行提单;
3、接口返回结果后再异步通知用户充值成功或失败(返款);
这种异步处理的方式大大的节省了服务器的请求响应时间,用户也无需一直等待着结果,用户最终只关心充值成功否,从而提高了系统的吞吐量,那么就带出了我们今天要讲的RabbitMQ

什么是RabbitMQ

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全
RabbitMQ是一个开源免费的AMQP实现,服务器端用Erlang语言编写,支持多种客户端;

AMQP的协议模型
在这里插入图片描述

RabbitMQ的安装

之前的文章中已经写过一篇具体的安装配置可以点击:
Windows系统安装最新版本RabbitMQ服务器及基本配置 https://blog.youkuaiyun.com/lhmyy521125/article/details/86643686
由于博主的开发环境是基于windows 如需其他系统环境的安装请自行百度

RabbitMQ的基本概念

ConnectionFactory

ConnectionFactory(连接工厂): 生产Connection的的工厂

Connection

Connection(连接)是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂

Channel

Channel(通道)是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息、消费消息等;一个连接Connection可以有多个Channel,我们可以想象成经常看到的网线(Connection) 里面的多条铜线(Channel)

Exchange

Exchange(交换机):生产者会将消息发送到交换机,然后交换机通过路由策略(规则)将消息路由到匹配的队列中去,

在这里插入图片描述

Routing Key

Routing Key(路由键):一个String值,用于定义路由规则,在队列绑定的时候需要指定路由键,在生产者发布消息的时候需要指定路由键,当消息的路由键和队列绑定的路由键匹配时,消息就会发送到该队列

Queue

Queue(队列)是RabbitMQ的内部对象,用于存储消息,可以看成一个有序的数组,如下图
在这里插入图片描述
RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费
在这里插入图片描述
多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理
在这里插入图片描述

Binding / Binding key

Binding(绑定)RabbitMQ中通过绑定,以路由键作为桥梁将Exchange与Queue关联起来(Exchange—>Routing Key—>Queue),这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了

Binding key(String):在Binding 中我们已经了解到,我们可以把Binding key理解成 Exchange 与 Queue 关联的标识字符,当生产者发布消息的时候会需要一个Routing Key 标识 ,当 Routing Key == Binding key 的时候,消息最终将会被路由到对应的Queue中

Exchange Types

RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种,这里我们先有一个认识,在往后的文章代码样例中我们再分别用实例来介绍讲解;

Producer 和 Consumer

Producer(生产者):生产者用于发布消息
Consumer(消费者):消费者从队列中获取消息

总结

本文介绍了RabbitMQ中的一些常规概念,或许第一次接触RabbitMQ的你依然云里雾里,没关系在接下来时间里,我会用样例来让大家慢慢理解~谢谢大家

下一篇

下一篇:RabbitMQ的Hello World之旅

评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micro麦可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值