保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java、Golang两种客户端教学Case) (一)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java、Golang两种客户端教学Case) (一)

什么是AMQP 和 JMS?#


AMQP:即Advanced Message Queuing Protocol,是一个应用层标准高级消息队列协议,提供统一消息服务。是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。


JMS:即Java消息服务(Java Message Service)应用程序接口,由sun公司提出,并且sun公司定义好了接口。包括create、send、recieve。只要想使用它,就得实现它定义的接口。 消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。不好的地方是语言层面的限制,只能为JAVA,这其实稍微有点和微服务的观点相违背。要求语言只能是JAVA,而不能是py等。


常见的MQ产品#


ActiveMQ:基于JMS,Apache

RocketMQ:(Rocket,火箭)阿里巴巴的产品,基于JMS,目前由Apache基于会维护

Kafka:分布式消息系统,亮点:吞吐量超级高,没秒中数十万的并发。

RabbitMQ:(Rabbit,兔子)由erlang语言开发,基于AMQP协议,在erlang语言特性的加持下,RabbitMQ稳定性要比其他的MQ产品好一些,而且erlang语言本身是面向高并发的编程的语言,所以RabbitMQ速度也非常快。且它基于AMQP协议,对分布式、微服务更友好。


安装RabbitMQ#


安装使用的rpm包我提前准备好了,如下:

操作系统:Centos7.3

推荐:这三个包我提前下载好了,关注白日梦的公众号(文末有二维码),后台回复:rbmq 可以直接领取。

如果你不怕麻烦也想自己参照文档自行下载,可参考文末的链接。


科普一下:

比如你安装软件A,结果这个软件可能依赖了软件B,于是你直接安装A就会接到报错,说当前操作系统环境中缺少软件B,让你先安装软件B后,再尝试安装软件A。

如果你看过Linux私房菜类似书,其实你应该也知道,rmp其实已经处理好各种依赖关系的软件包,所以安装起来相对来说是比较省心的。


# 安装erlang
yum install esl-erlang_23.0-1_centos_7_amd64.rpm -y
yum install esl-erlang-compat-18.1-1.noarch.rpm -y
# 安装rabbitmq
rpm -ivh rabbitmq-server-3.8.9-1.el7.noarch.rpm


比如遇到如下的安装包错,按提示解决就好了



下载依赖后重试即可完成安装。



启动RabbitMQ#


通过如下命令可启动:


service rabbitmq-server start



你可以像上面这样,安装之后立刻启动。

这时rabbitmq使用的是默认的配置参数。但是一般都来说我们都希望rabbitmq能使用我们可修改的配置文件启动,这样也方便我们后续对mq的控制,下面就一起看一rabbitmq的认证、授权、访问控制、配置文件。


你还可以像下面这样开启web插件。



开启web管理模块插件之后访问:http://服务器的ip:15672/ 可以找到登陆入口。



设置rabbitmq开机启动:


chkconfig rabbitmq-server on


什么是Authentication(认证)#


RabbitMQ启动之后,我们想使用它的前提是用username、password连接上它。这里所说的username和passowrd其实就是一个被授予一定权限的用户。


用户连接上RabbitMQ即可创建virtual host使用MQ。在说什么是virtual host之前,先说下RabbitMQ默认有的被授权的用户:username=guest、password=guest、virtualhost=/。


但是这个用户被限制了只能在RabbitMQ所在机器的本地才能登陆MQ(不允许你使用该用户通过ip+port远程登录RabbitMQ),就像下面这样:



你使用特定的用户去连接MQ的过程即为Authentication


指定RabbitMQ的启动配置文件#


rabbitmq提供给我们一个配置文件模版,默认在:/usr/share/doc/rabbitmq-server-xxx/rabitmq.conf.example

如果你没有找到的话也没关系,去github上拷贝一份模版配置,手动创建 /etc/rabbitmq/rabbitmq.conf 配置文件,然后将你拷贝的配置放进去也是ok的。

rabbitmq github addr:https://github.com/rabbitmq/rabbitmq-server/blob/v3.8.9/docs/



涉及到的都是基础的shell命令,不再赘述。

注意文件名为:rabbitmq.config,且要放在/etc/rabbitmq目录下。


如何让guest用户远程登陆RabbitMQ#


可以像下面这样修改你的MQ的配置文件:



然后通过service命令重启MQ,在web页面尝试登陆,接着你会成功登陆:



官方:强烈不建议允许默认的用户可远程登陆MQ,用过RabbitMQ的程序员都知道默认用户名和密码是啥,这会让你的系统的安全性大大降低!

推荐的做法是:删除默认用户、使用新的安全凭证创建新的用户


管理用户和权限#


其实文章看到这里,什么是用户?什么是权限?你肯定已经非常清楚了。

那什么是管理用户和权限?很简单,就比如:添加/删除 User,这个User可能属于某个业务线,有了User可以使用RabbitMQ这款中间件软件。以及为User分配他能读写的virtual host。


下一小节我们会细说什么是 virtual host


本小节主要是通过实验的方式展开,实战Rabbit的用户和权限管理!

主要有两种方式:

**1、通过web控制台管理 **

2、通过cli命令行管理

因为我们刚才允许guest这个超级管理员可以远程登陆MQ,于是你可以像下图这样在web页面上管理用户,比如我可以为业务线A,新添加一个用户changwu01,并且给他administrator的权限,然后这个业务线通过该用户使用MQ。



你也可以像下面这样使用cli,通过命令行的方式添加用户:



然后使用该用户尝试登陆,你会发现:报错了,说白日梦01不是管理员。不能登陆控制台。



如果你实战一下,现将bairimeng01的权限tags改成management,再尝试登陆,它会提示你说:


所以,这时你可以直接使用guest用户登陆,然后将bairimeng01的权限改成:administrator


然后修改bairiemeng01的权限,并点击update user



修改之后重新使用bairimeng01登陆:

你会发现bairimeng01可以成功登陆!



查看当前RabbitMQ有哪些用户:



通过命令行创建用户airimeng03、并通过命令行让白日梦03有对virtualhost=/有读写权



可以通过控制台确认一下,我们的配置确实生效了。



RabbitMQ中的概念#


什么是virtual host#


可以通过MySQL和MySQL中的数据库来理解RabbitMQ和virtual host的关系。

MySQL大家都不陌生,经常会出现多个业务线混用一个MySQL数据库的情况,就像下图这样,每个业务线都在MySQL中创建自己的数据库,使用时各自往各自的数据库中存储数据,彼此相互不干涉。



RabbitMQ和virtual host的关系也差不多,可以让多个业务线同时使用一个RabbitMQ,只要为业务线各个业务线绑定上不同的virtual host即可:



创建virtual host 并指定用户可以使用它#


Step1:



Step2:



Step3:



Step4: 校验


相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
12006 33
MCP客户端调用看这一篇就够了(Java版)
|
6月前
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
339 7
|
7月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
就这样,你成功地用魔法召唤出了RabbitMQ,还把它和你的应用程序连接了起来。现在,消息会像小溪流水一样,在你的系统中自由流淌。别忘了,兔子们不喜欢孤独,他们需要你细心的关怀,不时地监控它们,确保他们的世界运转得井井有条。
508 18
|
8月前
|
存储 网络协议 Java
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
578 25
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
370 3
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
783 2
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
991 4
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
4781 1
|
Oracle Java 关系型数据库
在 Debian 12 上安装 Java 21
在 Debian 12 上安装 Java 21

推荐镜像

更多