zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

2023-09-27 14:25:58 时间
保姆级别的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包我提前准备好了 如下


image


操作系统 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


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


image


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


image


启动RabbitMQ#

通过如下命令可启动


service rabbitmq-server start


image


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

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


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


image


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


image


设置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 就像下面这样


image


你使用特定的用户去连接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/


image


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

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


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

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


image


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


image


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

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


管理用户和权限#

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

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


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


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

主要有两种方式


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

2、通过cli命令行管理

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


image


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

image


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


image


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


image


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


image


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


image


修改之后重新使用bairimeng01登陆


你会发现bairimeng01可以成功登陆


image


查看当前RabbitMQ有哪些用户


image


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


image


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


image


RabbitMQ中的概念#什么是virtual host#


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

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


image


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


image


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


Step1:


image


Step2:


image


Step3:


image


Step4: 校验


image