RabbitMQ介绍和快速上手案例

news2025/3/12 12:58:18

文章目录

  • 1.引入
    • 1.1同步和异步
    • 1.2消息队列的作用
    • 1.3rabbitMQ介绍
  • 2.安装教程
    • 2.1更新软件包
    • 2.2安装erlang
    • 2.3查看这个erlang版本
    • 2.4安装rabbitMQ
    • 2.5安装管理页面
    • 2.6浏览器测试
    • 2.7添加管理员用户
  • 3.rabbitMQ工作流程
  • 4.核心概念介绍
    • 4.1信道和连接
    • 4.2virtual host
    • 4.3quene队列
  • 5.Web界面操作
    • 5.1新建用户
    • 5.2新建虚拟机
    • 5.3现身说法
    • 5.4多此一举
  • 6.快速入门
    • 6.1引入依赖
    • 6.2生产者消费者代码
    • 6.3查看效果

1.引入

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

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

1.1同步和异步

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

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

image-20241114183032627

1.2消息队列的作用

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

image-20241114183221923

1.3rabbitMQ介绍

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

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

2.安装教程

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

2.1更新软件包

#下面的这个就是更新安装包
sudo apt-get undate

image-20241114183701999

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

2.2安装erlang

sudo apt-get install erlang

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

2.3查看这个erlang版本

erl

image-20241114184010427

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

2.4安装rabbitMQ

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

sudo apt-get update

sudo apt-get install rabbitmq-server

systemctl status rabbitmq-server

image-20241114184406311

2.5安装管理页面

rabbitmq-plugins enable rabbitmq_management

image-20241114184451489

2.6浏览器测试

image-20241114193124371

2.7添加管理员用户

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

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

rabbitmqctl add_user   ***   ***

rabbitmqctl set_user_tags 用户名 administrator

3.rabbitMQ工作流程

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

image-20241114200205121

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

4.核心概念介绍

4.1信道和连接

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

image-20241114201255856

4.2virtual host

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

4.3quene队列

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

5.Web界面操作

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

5.1新建用户

image-20241114202416085

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

image-20241114202523232

5.2新建虚拟机

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

image-20241114212215760

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

image-20241114212347610

5.3现身说法

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

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

image-20241114212620217

5.4多此一举

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

image-20241114212925216

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

image-20241114213107449

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

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

image-20241114213329187

6.快速入门

6.1引入依赖

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

image-20241114211948373

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

image-20241114212024119

6.2生产者消费者代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

aws(学习笔记第十二课) 使用AWS的RDS-MySQL

aws(学习笔记第十二课) 使用AWS的RDS 学习内容&#xff1a; AWS的RDS-MySQL 1. 使用AWS的RDS 什么是RDS RDS就是Relation Database Service的缩写&#xff0c;是AWS提供的托管关系型数据库系统。让用户能够在 AWS Cloud 云中更轻松地设置、操作和扩展关系数据库。 数据库和we…

跳房子(弱化版)

题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏&#xff0c;也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下&#xff1a; 在地面上确定一个起点&#xff0c;然后在起点右侧画 n 个格子&#xff0c;这些格子都在同一条直线上。每个格子内…

A029-基于Spring Boot的物流管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

Spring系统框架

Spring Framework系统架构 1.Spring核心概念 代码书写现状 耦合度偏高 解决方案 使用对象时&#xff0c;在程序中不要主动使用new产生对象&#xff0c;转换为外部提供对象 IOC(Inversion of Control)控制反转 对象的创建控制权由程序移到外部&#xff0c;这种思想称为控制…

鸿蒙实战:页面跳转

文章目录 1. 实战概述2. 实现步骤2.1 创建项目2.2 准备图片素材2.3 编写首页代码2.4 创建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 实战概述&#xff1a;本实战通过ArkUI框架&#xff0c;在鸿蒙系统上开发了一个简单的两页面应用。首页显示问候语和“下一页”按钮&…

文献解读-DNAscope: High accuracy small variant calling using machine learning

关键词&#xff1a;基准与方法研究&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;DNAscope: High accuracy small variant calling using machine learning标题&#xff08;中文&#xff09;&#xff1a;DNAsc…

程序设计方法与实践-变治法

变换之美 变治法就是基于变换的思路&#xff0c;进而使原问题的求解变得简单的一种技术。 变治法一般有三种类型&#xff1a; 实例化简&#xff1a;将问题变换为同问题&#xff0c;但换成更为简单、更易求解的实例。改变表现&#xff1a;变化为同实例的不同形式&#xff0c;…

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url 第一类情况 在anaconda创建新环境时&#xff0c;使用如下代码 conda create -n charts python3.7 错误原因&#xff1a; 默认镜像源访问速度过慢&#xff0c;会导致超时从而导致更新和下载失败。 解决方…

Spring Boot框架:电商系统的技术革新

4 系统设计 网上商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经过全…

wordpress下载站主题推荐riproV5 wordpress日主题

iPro主题全新V5版本&#xff0c;是一个优秀且功能强大、易于管理、现代化的WordPress虚拟资源商城主题。支持首页模块化布局和WP原生小工具模块化首页可拖拽设置&#xff0c;让您的网站设计体验更加舒适。同时支持了高级筛选、自带会员生态系统、超全支付接口等众多功能&#x…

微服务即时通讯系统的实现(客户端)----(1)

目录 1. 项目整体介绍1.1 项目概况1.2 界面预览和功能介绍1.3 技术重点和服务器架构 2. 项目环境搭建2.1 安装Qt62.3 安装vcpkg2.3 安装protobuf2.4 构建项目2.5 配置CMake属性 3. 项目核心数据结构的实现3.1 创建data.h存放核心的类3.2 工具函数的实现3.3 创建编译开关 4. 界面…

2024年11月15日

1.计算机网络 逻辑右移 做加减法 定点乘法 原码乘法运算 一位乘 计组 2.英语六级

算法定制LiteAIServer摄像机实时接入分析平台玩手机打电话检测算法:智能监控的新篇章

在现代社会&#xff0c;随着智能手机的普及&#xff0c;无论是在工作场所还是公共场所&#xff0c;玩手机或打电话的行为日益普遍。然而&#xff0c;在某些特定环境下&#xff0c;如工厂生产线、仓库、学校课堂等&#xff0c;这些行为可能会影响到工作效率、安全或教学秩序。为…

算法--解决二叉树遍历问题

第一 实现树的结构 class Node(): # 构造函数&#xff0c;初始化节点对象&#xff0c;包含数据和左右子节点 def __init__(self, dataNone): self.data data # 节点存储的数据 self.left None # 左子节点&#xff0c;默认为None self.rig…

深度学习基础—Beam search集束搜索

引言 深度学习基础—Seq2Seq模型https://blog.csdn.net/sniper_fandc/article/details/143781223?fromshareblogdetail&sharetypeblogdetail&sharerId143781223&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上篇博客讲到&#xff0c;贪心算…

C++__day1

1、思维导图 2、如果登录失败&#xff0c;提示用户登录失败信息&#xff0c;并且提示错误几次&#xff0c;且重新输入&#xff1b;如果输入错误三次&#xff0c;则退出系统 #include <iostream> using namespace std;int main() {string id , pswd;string user"admi…

【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

欧式距离和曼哈顿距离是两种常用的距离度量方法&#xff0c;用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。 1. 欧式距离 概念 欧式距离&#xff08;Euclidean Distance&#xff09;是最常见的直线距离度量方法&#xff0c;源于欧…

Java之JDBC,Maven,MYBatis

前言 就是用来操作数据库的 1.JDBC快速入门 注意在使用前一定要导入jar包 在模块那里新建目录&#xff0c;新建lib&#xff0c;粘贴复制jar包&#xff0c;我这个jar设置的是模块有效 package test1017;import java.sql.Connection; import java.sql.DriverManager; import…

JavaWeb笔记整理——Spring Task、WebSocket

目录 SpringTask ​cron表达式 WebSocket SpringTask cron表达式 WebSocket

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …