Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RabbitMQ介绍和快速上手案例

RabbitMQ介绍和快速上手案例

作者头像
阑梦清川
发布于 2025-02-24 14:13:28
发布于 2025-02-24 14:13:28
16100
代码可运行
举报
文章被收录于专栏:学习成长指南学习成长指南
运行总次数:0
代码可运行

1.引入

废话不多说,这个rabbitMQ就是我们的消息队列,其中这个单词的前面的部分翻译之后就是兔子的意思,后面的这个mq就是我们的message quene简称;

我们之前学习这个生产者消费者模型的时候,是学习过这个消息队列的,其实就是对于我们的一个系统发往另外一个系统的这个数据消息进行存储;

1.1同步和异步

下面的这个直接调用接口的话就是我们的同步的方式;

如果是借助这个消息队列实现的话就是我们的异步;

image-20241114183032627
image-20241114183032627

1.2消息队列的作用

下面的这个作用其实就是详细介绍罢了,我们之前介绍的这个就是削峰填谷,想想三峡大坝的例子就可以明白这个消息队列的作用了,两个的这个作用就是很相似的;

image-20241114183221923
image-20241114183221923

1.3rabbitMQ介绍

这个其实也没有什么好介绍的,这个就是我们的消息队列的一种,因为这个兔子的繁殖速度快嘛,所以使用这个rabbit进行表示,没有其他的意思;

这个rabbitMQ也仅仅是我们的这个众多的产品里面的一种罢了,我们主要学习这个消息队列;

2.安装教程

我们的这个rabbitmq是基于这个erlang语言的,因此想要安装这个rabbit需要首先安装这个erlang

2.1更新软件包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#下面的这个就是更新安装包
sudo apt-get undate
image-20241114183701999
image-20241114183701999

这个的速度很快,一会就好了;

2.2安装erlang

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install erlang

这个过程需要等待较长的时间,中途需要输入这个y/n,我们输入这个y即可

2.3查看这个erlang版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
erl
image-20241114184010427
image-20241114184010427

显示上面的这个即为安装成功,我们使用这个ctrl+c/v退出这个即可;

2.4安装rabbitMQ

下面的就是更新我们的软件包,安装服务,检查状态;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update

sudo apt-get install rabbitmq-server

systemctl status rabbitmq-server
image-20241114184406311
image-20241114184406311

2.5安装管理页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmq-plugins enable rabbitmq_management
image-20241114184451489
image-20241114184451489

2.6浏览器测试

image-20241114193124371
image-20241114193124371

2.7添加管理员用户

下面的这个第一行就是设置我们的这个用户名和密码,第一个***表示的就是我们自己设置的这个用户名,第二就是我们自己设置的这个密码;

第二行就是设置我们的这个用户权限,这个名字需要和我们的这个第一行里面使用的这个名字是一样的,然后设置之后就可以使用IP+15672进行访问,这个云服务器需要开放这个15672端口才可以的偶;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl add_user   ***   ***

rabbitmqctl set_user_tags 用户名 administrator

3.rabbitMQ工作流程

这个队列的工作流程如下图所示,其中这个里面的这个channel就是负责接受这个生产者发来的这个消息,然后把这个消息给我们的交换机,我们的交换机把这个消息匹配到这个对应的队列上面去;

image-20241114200205121
image-20241114200205121

我们的这个channel也和我们的这个消费者进行交互,其中我们的这个queue上面的这个消息不知直接给这个消费者,也是通过我们的这个channel进行传输的;

4.核心概念介绍

4.1信道和连接

这个工作流程图里面的这个connection表示的就是我们的这个链接,这个channel就是一个抽象地表示,表示的就是我们的通道,也可称之为信道;

image-20241114201255856
image-20241114201255856

4.2virtual host

这个表示的就是我们的虚拟主机,上面的这个流程图里面是我们的这个信道和我们的链接的都是在这个虚拟主机上面的,这个虚拟主机和我们日常说的这个虚拟机不是一个概念,这个需要加以区分;

4.3quene队列

我们的这个队列和我们的消费者之间是一对多的关系,就是我们的这个一个队列可以发送给我们的多个消费者,我们的这一个消费者可以索要多个队列消息;

5.Web界面操作

我们可以添加这个用户,也可以对于这个已经存在的这个用户的相关的信息进行修改,这些都是允许的,添加的话就是点击这个add user选项即可;

5.1新建用户

image-20241114202416085
image-20241114202416085

我们点击这个用户admit,点击下面的这个set选项,就可以为这个用户添加这个虚拟机使用的权限;

image-20241114202523232
image-20241114202523232

5.2新建虚拟机

上面的核心工作流程已经说明了,这个虚拟主机就是存放我们的这个交换机和我们的这个队列的;

image-20241114212215760
image-20241114212215760

需要自己新建一个虚拟主机,而不是使用这个上面已经存在的;

image-20241114212347610
image-20241114212347610

5.3现身说法

我自己这个虚拟主机就是mq名字,下面的这个形容description和这个tag标签都是可以随便写的,这个是无所谓的,然后点击这个添加就可以了;

我们上面创建了这个新的用户,我们需要进行这个二次确认,我自己的话就是我的这个mq主机可以让这个我自己创建的这个zzy用户访问到,这个需要额外的配置,否则我们下面进行这个后端的代码编写的时候就会出错,这个就是我的亲生经历,因为我当时听到这个地方的时候感觉这个新建用户和云主机没啥,没想到后端进行链接的时候就会使用到这个地方我们自己新建的这个虚拟主机和我们的这个个人的用户

image-20241114212620217
image-20241114212620217

5.4多此一举

我自己也是在这个地方犯了错误,所以为了截图,特意新建一个账户,就是下面的这个可以看到的这个zzy2,可以看到这个默认是没有访问权限的,就是这个黄色的部分;

image-20241114212925216
image-20241114212925216

这个时候我们的做法就是把这个下拉框里面找到我们的这个mq虚拟主机,这个就是建立连接;

image-20241114213107449
image-20241114213107449

再次返回的时候我们就可以看到我们的设置的效果是生效的;

这个时候我们使用这个虚拟主机进行查看,发现这个是也同步上的,就是说,我们可以在这个用户端操作,也可以在这个虚拟主机上面操作,只要在这个一方上面进行操作,另外一方都是可以看到这个变化的,我们在一个上面进行操作就可以了;

image-20241114213329187
image-20241114213329187

6.快速入门

6.1引入依赖

首先需要到这个中央仓库去找:

image-20241114211948373
image-20241114211948373

然后导入到我们的这个pom.xml文件里面去:(这个时候可能会遇到这个加载不出来的情况,可以考虑使用我们的国内源,我自己遇到了这个情况,使用国内源就是可以解决的);

image-20241114212024119
image-20241114212024119

6.2生产者消费者代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producter {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.下面的这个就是建立连接
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("*****");//这个就是我们自己的这个IP号
        connectionFactory.setPort(5672);//这个就是我们使用的端口,需要提前开放
        connectionFactory.setUsername("***");
        //这个就是我们的用户名字,需要我们在web页面的时候设置好
        
        connectionFactory.setPassword("******");
        //这个就是我们的新增用户的时候设置的密码
        
        connectionFactory.setVirtualHost("**");
        //上面的这个就是我们的虚拟主机的名字,也是需要我们自己去建立起来的
        
        Connection connection = connectionFactory.newConnection();

        //2.下面的这个就是开放信道
        Channel channel = connection.createChannel();
        //3.声明交换机---内置的交换机
        //4.声明队列---
        /**
         * (String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                 Map<String, Object> arguments
         * quene:队列的名称
         * durable;是否可以持久化
         * exclusive:是否可以独占
         * autoDelete:是否可以自动删除
         * arguments:这个标识的就是参数
         */
        channel.queueDeclare("hello", true, false, false, null);
        //5.内置交换机都绑定了这个对应的队列
        /**
         * String exchange, String routingKey, BasicProperties props, byte[] body
         * exchange表示的就是我们的这个交换机的名字
         * routingKey是那个队列的名字,这个就会发送给那一个队列
         * props属性配置
         * body就是我们传递的消息
         */
        String msg="hello RabbitMQ!!";
        channel.basicPublish("", "hello", null, msg.getBytes());
        
        //下面的这个就是我们不去定义这个meg这个字符串,直接去调用这个getbytes方法也是可以成功的
        //channel.basicPublish("", "hello", null, ("Hello World").getBytes());
        System.out.println("消息发送成功");

        //6.资源释放
        channel.close();
        connection.close();
    }


}

6.3查看效果

我们可以看到这个消息已经被我们的这个消费者接收到了,证明这个交互的过程是没有问题的;

image-20241114211811177
image-20241114211811177
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rabbitmq系列(一)初识rabbitmq
案例:假如我们开发了一个商品抢购网站。这个网站的目的就是在某一时间点进行抢购商品,同时要求用户注册,在注册的时候会同时给用户电话和邮箱中发送验证码,以便完成信息注册。传统做法应该是这样的。两种方式,并行即启用两个线程,当用户提交信息后,分别去发送邮件和发送短信。这种方式很明显比串行的方式更快。当我们加入消息队列后,处理方式如下图:
Java旅途
2020/06/25
9620
快速入门RabbitMQ核心概念
我们知道RabbitMQ是基于Erlang编写的,所以在安装RabbitMQ之前需要确保安装了Erlang环境。RabbitMQ与Erlang是有版本对应关系的,可以参考官方列举的版本对应关系:
端碗吹水
2020/11/24
5390
【RabbitMQ】AMQP协议、生产者和消费者的代码编写
AMQP(Advanced Message Queuing Protocol)是一种高级消息队列协议
椰椰椰耶
2025/04/17
1330
【RabbitMQ】AMQP协议、生产者和消费者的代码编写
超详细的RabbitMQ快速入门
优势一:服务解耦 个业务需要多个模块共同实现,或者一条消息有多个系统需要对应处理,只需要主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合。
HandsomeYo
2025/04/03
3040
超详细的RabbitMQ快速入门
【RabbitMQ】快速入门学习MQ
两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同
陶然同学
2023/02/24
3900
【RabbitMQ】快速入门学习MQ
RabbitMQ系列2 RabbitMQ安装与基础入门
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
一只胡说八道的猴子
2021/03/04
4930
RabbitMQ系列2  RabbitMQ安装与基础入门
RabbitMQ由浅入深入门全总结(一)
距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~
BWH_Steven
2021/07/09
1K0
RabbitMQ面试必备知识点及实战(二)-核心概念
开源的消息代理和队列服务器,通过普通协议在完全不同的应用间共享数据,使用Erlang语言编写,并且基于AMQP协议。
JavaEdge
2022/11/30
3580
RabbitMQ面试必备知识点及实战(二)-核心概念
RabbitMQ初识以及简单模式初步
消息队列这种技术主要用在分布式设计当中,其实可以说是一种设计模式。是相对同步系统而言的。同步系统是什么呢?
兰舟千帆
2022/07/18
2440
RabbitMQ初识以及简单模式初步
学习RabbitMQ这篇就够了快速入门上手(超详细)
而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。
陶然同学
2023/02/27
1.2K0
学习RabbitMQ这篇就够了快速入门上手(超详细)
RabbitMQ初识以及简单模式初步
消息队列这种技术主要用在分布式设计当中,其实可以说是一种设计模式。是相对同步系统而言的。同步系统是什么呢? 同步,是当所有的操作都完毕,才会返回结果,比如用户支付,如果是同步的话就是当用户所发起的支付操作,然后只有等支付的这个业务成功然后才给用户返回结果说支付成功,但是分布式的异步就不一样了, 异步的话它并不是等一套操作全部完成才会返回结果。用户发起支付操作,那么这个操作会立马返回给用户您已经支付成功,然后后面具体的支付扣款以及转账数据等等的操作是自己独立完成的。用户发起支付后,我们只要把这个支付的消息告诉后面的操作,说用户支付了,后面的操作逻辑我就不管了,我现在立马给用户返回信息,让用户及时得到反馈。这就是异步。
兰舟千帆
2022/08/03
2360
RabbitMQ初识以及简单模式初步
深入解读RabbitMQ工作原理及简单使用
MQ全称是Message Queue,可以理解为消息队列的意思,简单来说就是消息以管道的方式进行传递。
磊哥
2018/08/02
4.8K0
深入解读RabbitMQ工作原理及简单使用
快速学习-RabbitMQ快速入门
RabbitMQ由Erlang语言开发,Erlang语言用于并发及分布式系统的开发,在电信领域应用广泛,OTP(Open Telecom Platform)作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库,安装RabbitMQ需 要安装Erlang/OTP,并保持版本匹配,如下图:
cwl_java
2020/01/14
1.1K0
快速学习-RabbitMQ快速入门
RabbitMQ的安装与使用(Centos7,linux版本)
  1)、ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,并且它一个完全支持jms(java message service)规范的消息中间件。其丰富的api,多种集群构建模式使得他成为业界老牌消息中间件,在中小企业中应用广泛。 如果不是高并发的系统,对于ActiveMQ,是一个不错的选择的,丰富的api,让你开发的很愉快哟。 注意:MQ衡量指标:服务性能,数据存储,集群架构。
别先生
2022/05/11
1.5K0
RabbitMQ的安装与使用(Centos7,linux版本)
分布式--RabbitMQ入门
分布式项目中,模块与模块之间的通信可以使用RPC框架,如Dubbo,但RPC中调用方模块获取到被调用方的结果是同步的,争对一些只需要异步调用的方法,如日志存储、发送消息等,RPC就显得效率低下了,AMQP协议的推出就是用来解决进程之间的异步消息通信
aruba
2022/09/19
5870
分布式--RabbitMQ入门
RabbitMQ 学习(二)---- HelloWorld 简单模型
之前我们使用rabbitMq 网页客户端 开放了 15672 的端口,要想是的 java客户端访问服务器成功,需要开放 5672 的端口号。在服务器安全组设置
RAIN7
2022/09/29
3090
RabbitMQ 学习(二)---- HelloWorld 简单模型
Windows下RabbitMQ安装及入门
1.Windows下安装RabbitMQ需要以下几个步骤    (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erla
庞小明
2018/03/08
6680
Windows下RabbitMQ安装及入门
RabbitMQ入门
RabbitMQ是一个开源的AMQP(Advanced Message Queuing Protocol)实现,服务端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性,扩展性,高可用性等方面表现不俗。
CodingDiray
2020/05/13
6030
RabbitMQ入门
快速入门RabbitMQ
两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。
Maynor
2022/03/30
3800
快速入门RabbitMQ
【消息中间件】1小时快速上手RabbitMQ
考虑由订单系统与库存系统、支付系统、物流系统直接通过远程调用方式通信,模块耦合度较高的情况。
半旧518
2023/10/17
5720
【消息中间件】1小时快速上手RabbitMQ
相关推荐
rabbitmq系列(一)初识rabbitmq
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验