RabbitMQ介绍和快速上手案例

文章目录

  • 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 updatesudo apt-get install rabbitmq-serversystemctl 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.mzph.cn/bicheng/60988.shtml

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

相关文章

《PCA 原理推导》18-5线性变换生成的随机变量y_i和y_j的协方差 公式解析

本文是将文章《PCA 原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 18 - 5 18\text{-}5 18-5 的内容如下&#xff1a; cov ( y i , y j ) a i T Σ a j , i , j 1 , 2 , … , m \text{cov}(y_i, y_j) a_i^T \Sigma a_j, \quad i, j…

数据结构(初阶4)---循环队列详解

循环队列 1.循环队列的结构  1).逻辑模式 2.实现接口  1).初始化  2).判断空和满  3).增加  4).删除  5).找头  6).找尾 3.循环队列的特点 1.循环队列的结构 1).逻辑模式 与队列是大同小异的&#xff0c; 其中还是有一个指向队列头的head指针&#xff0c; 也有一个指向尾…

C++知识点总结(57):STL综合

STL综合 一、数据结构1. 队列2. 映射 二、队列例题1. 约瑟夫环&#xff08;数据加强&#xff09;2. 打印队列3. 小组队列4. 日志统计 2.0 三、映射真题1. 眼红的 Medusa2. 美食评委 一、数据结构 1. 队列 功能代码定义queue<tp>q入队.push(x)出队.pop()队头.front()队尾…

java中volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?

大家好&#xff0c;我是锋哥。今天分享关于【java中volatile 类型变量提供什么保证&#xff1f;能使得一个非原子操作变成原子操作吗&#xff1f;】面试题。希望对大家有帮助&#xff1b; java中volatile 类型变量提供什么保证&#xff1f;能使得一个非原子操作变成原子操作吗&…

Python - 初识Python;Python解释器下载安装;Python IDE(一)

一、初识Python Python 是一种高级编程语言&#xff0c;Python是一种面向对象的解释型计算机程序设计语言&#xff0c;Python由荷兰国家数学与计算机科学研究中心的吉多范罗苏姆&#xff08;&#xff09;Guido van Rossum吉多范罗苏姆&#xff08;&#xff09;于1989 年底发明…

flink StreamGraph 构造flink任务

文章目录 背景主要步骤代码 背景 通常使用flink 提供的高级算子来编写flink 任务&#xff0c;对底层不是很了解&#xff0c;尤其是如何生成作业图的细节 下面通过构造一个有向无环图&#xff0c;来实际看一下 主要步骤 1.增加source 2.增加operator 3. 增加一条边&#xff0…

AR眼镜方案_AR智能眼镜阵列/衍射光波导显示方案

在当今AR智能眼镜的发展中&#xff0c;显示和光学组件成为了技术攻坚的主要领域。由于这些组件的高制造难度和成本&#xff0c;其光学显示模块在整个设备的成本中约占40%。 采用光波导技术的AR眼镜显示方案&#xff0c;核心结构通常由光机、波导和耦合器组成。光机内的微型显示…

六:从五种架构风格推导出HTTP的REST架构

在分布式系统中,架构风格(Architectural Style)决定了系统组件如何交互、通信、存储和管理数据。每种架构风格都有其独特的特性和适用场景。本文将从五种典型的架构风格出发,逐步探讨它们如何影响了REST(Representational State Transfer,表述性状态转移)架构风格的设计…

星辰资讯 | TiDB v7.5.4 v8.4.0 发版

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/6e299751 TiDB 8.4.0 DMR 发版 11 月 11 日&#xff0c;TiDB 8.4.0 版本发布&#xff0c;以下是该版本的一些关键特性和改进&#xff1a; 性能 分区表全局索引成为正式功能 &#xff1a;提高检索…

Python 打包教程:从零开始构建可分发的Python包

Python 打包教程&#xff1a;从零开始构建可分发的Python包 引言 在Python开发中&#xff0c;打包是一个重要的环节。无论是共享代码、发布库还是部署应用&#xff0c;创建一个可分发的Python包都是必不可少的步骤。本文将详细介绍如何打包Python项目&#xff0c;涵盖从基础知…

大模型基础BERT——Transformers的双向编码器表示

大模型基础BERT——Transformers的双向编码器表示 整体概况 BERT&#xff1a;用于语言理解的深度双向Transform的预训练 论文题目&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Bidirectional Encoder Representations from…

Python教程笔记(2)

Python教程 5.1 列表详解5.1.3 列表推导式5.1.4 嵌套的列表推导式 5.7 深入条件控制6.1 模块详解6.3 dir()7.1 格式化字符串字面值7.1.3 手动格式化字符串 7.2 读写文件 5.1 列表详解 Python 中所有可变数据结构返回值为None。实现队列最好用 collections.deque。 5.1.3 列表…

DAHL:利用由跨越 29 个类别的 8,573 个问题组成的基准数据集,评估大型语言模型在生物医学领域长篇回答的事实准确性。

2024-11-14&#xff0c;由首尔国立大学创建的DAHL数据集&#xff0c;为评估大型语言模型&#xff08;LLMs&#xff09;在生物医学领域长文本生成中的幻觉问题提供了一个重要的工具&#xff0c;这对于提高模型的准确性和可靠性具有重要意义。 数据集地址&#xff1a;DAHL|生物医…

GStreamer 简明教程(九):Seek 与跳帧

系列文章目录 GStreamer 简明教程&#xff08;一&#xff09;&#xff1a;环境搭建&#xff0c;运行 Basic Tutorial 1 Hello world! GStreamer 简明教程&#xff08;二&#xff09;&#xff1a;基本概念介绍&#xff0c;Element 和 Pipeline GStreamer 简明教程&#xff08;三…

【微软:多模态基础模型】(1)从专家到通用助手

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

GRE做题笔记(零散的个人经验)

locomotive机车By 1813, the Luddite resistance had all but vanished. all but表示“几乎完全”的程度&#xff0c;或者表示排除piston活塞attributed to 归因于how a sportsperson accounted for their own experience of stress 运动员如何解释自己的压力经历 &#xff0c;…

【蓝桥杯算法】Java的基础API

1. BigInteger 的使用 1.1. 判素数 package 模板;import java.math.BigInteger; import java.util.Scanner;public class 判素数 {static Scanner in new Scanner(System.in);public static void main(String[] args) {int q in.nextInt();while (q-- > 0) {BigInteger …

【项目实战】基于 LLaMA-Factory 通过 LoRA 微调 Qwen2

【项目实战】基于 LLaMAFactory 通过 LoRA 微调 Qwen2 一、项目介绍二、环境准备1、环境准备2、安装LLaMa-Factory3、准备模型数据集3.1 模型准备3.2 数据集准备 三、微调1、启动webui2、选择参数3、训练 四、测试五、总结 一、项目介绍 LLaMA-Factory是一个由北京航空航天大学…

数据仓库在大数据处理中的作用

数据仓库&#xff08;Data Warehouse&#xff0c;简称DW或DWH&#xff09;是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。以下是对数据仓库及其在大数据处理中作用的详细解释&#xff1a; 一、数据仓库的定义 面向主题&#x…

第23课-C++-红黑树的插入与旋转

&#x1f307;前言 红黑树是一种自平衡的二叉搜索树&#xff0c;因其出色的性能&#xff0c;广泛应用于实际中。Linux 内核中的 CFS 调度器便是一个使用红黑树的例子&#xff0c;这足以说明它的重要性。红黑树的实现通过红黑两种颜色的控制来维持平衡&#xff0c;并在必要时使…