RabbitMQ 介绍和安装
★MQ简介
在计算机科学中,消息队列(Message queue)是一种进程间通信或同以进程的不同线程间的通信方式。软件的贮列用来处理一系列的输入,通常是来自用户,消息队列提供了异步的通信协议,每一个贮列中的记录包含先兄说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者合接收者不需要同时与消息队列交互,消息会保存在队列中,直到接收者取回它。
1.实现
消息队列常常保存在链表结构中,拥有权限的进程可以像消息队列中写入或读取消息。
目前,有很多消息队列有很多开源的实现,包括:JBoss Messaging、JORAM、Apache ActiveMQ、Sun Open Message Queue、IBM MQ、Apache Opid和HTTPQS。
当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可以实现消息队列的功能。
ActiveMQ:老牌消息队列,性能不高,难以应对现在高并发情况。
kafka:性能最高,但可靠性有问题,会出现漏发、重发等 情况。
RocketMQ:阿里巴巴的只开源了部分功能,商业功能需要付费。
RabbitMQ:目前是最好的消息队列,大公司使用的最多。
2.特点
MQ是消费者、生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API订阅,而MQ则是遵循了AMQP协议的具体实现和产品。
注意:
① AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开放语言等条件的限制。
②JMS,Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进程异步通信。java消息服务是一个与具体平台无关的API,绝大多数MQM提供商都对JMS提供支持。常见的消息队列,大部分都实现了JMS API,如:ActiveMQ、Redis以及RabbitMQ等。
3.优缺点
①优点
应用耦合、异步处理、流量削峰
- 解耦
传统模式:
传统模式的缺点:系统间耦合性太强,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!
中间件模式:
中间件的优点:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
- 异步
传统模式:
传统模式的缺点:一些非必要的业务逻辑以同步的方式运行,太耗费时间。
中间件模式:
中间件模式的优点:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
- 削峰
传统模式:
传统模式的缺点:并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常
中间件模式:
中间件的优点:系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。
②缺点
系统可用性降低、系统复杂性增加。
4.使用场景
消息队列,是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。
在项目中,将一些无需要即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
5.为什么要使用RabbitMQ
AMQP,高级消息队列协议,是应用层协议的医康开放标准,为表面消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
总结如下:
基于AMQP协议
高并发(是一个容量的概念,服务器可用接受的最大任务数量)
高性能(是一个速度的概念,单位时间内服务器可用处理的任务数)
高可用(是一个持久的概念,单位时间内服务器可以正常工作的时间比例)
强大的社区支持,以及很多公司都在使用。
支持插件
支持多语言。
★安装RabbitMQ
1.安装Erlang
官网:http://www.erlang-solutions.com/resources/download.html
Erlang和RabbitMQ版本要对应,否则报错
官网:https://www.rabbitmq.com/which-erlang.html
下载连接:
也可以直接下载widows版本的Erlang:https://www.erlang.org/downloads
一路next默认设置。
安装完之后需要添加环境变量
①添加
RELANG_HOME
②Path中添加
;%ERLANG_HOME%\bin
③命令行验证,输入erl,显示版本号说明安装成功:
2.安装RabbitMQ
官网:https://www.rabbitmq.com/download.html
双击下载后的.exe文件,安装过程与erlang的安装过程相同。
RabbitMQ安装好后接下来安装RabbitMQ-Plugins。打开命令行cd,输入RabbitMQ的sbin目录。
我的目录是:D:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.11\sbin
然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装
打开命令行命令行,进入RabbitMQ的安装目录: sbin
,输入 rabbitmqctl status , 如果出现以下的图,说明安装是成功的,并且说明现在RabbitMQ Server已经启动了,运行正常。
打开sbin目录,双击rabbitmq-server.bat
等几秒钟看到这个界面后,访问http://localhost:15672
默认用户名和密码都是guest
登陆即可。
★简单队列
官网:https://www.rabbitmq.com/getstarted.html
消息生产者(producer):只是用来发送.
队列(Queue):用来存储消息的,队列不限制大小,取决于服务器内存和硬盘的大小。
消费者(Consumer):用来监听队列、接收消息的
1.IDEA创建一个新的Maven项目
2.添加依赖(在Maven仓库中搜索 RabbitMQ Java Client)
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.10.0</version> </dependency>
编写Send.java代码:
package com.ckfuture.simple.send; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.nio.charset.StandardCharsets; /** * 简单队列-消息生产者 */ public class Send { //定义队列名称 private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws Exception { //创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); //连接工厂的地址 factory.setHost("localhost"); try ( //连接工厂创建连接 Connection connection = factory.newConnection(); //创建信道 Channel channel = connection.createChannel()) { //绑定队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; //发送消息 channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); System.out.println(" [x] Sent '" + message + "'"); } } }
运行结果:
在管理控制台可以看到:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!