本文中的相关系统及安装的软件版本如下所示:
操作系统版本:CentOS Linux release 7.7.1908 (Core)
RabbitMQ版本:3.8.1
erlang版本:Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 11.2.2.3
一、通过一个故事来理解什么是“消息队列”
故事原型:
比如,小时候你爸爸要出差了,因为赶时间,家里的事情他没做完,但他又没能联系上你。于是他给你留下一张小纸条要你去做,内容是这样的(其实这张小纸条就是一个消息队列):
收碗筷
擦饭桌
拖地
你根据小纸条上面的3条消息,依次做完了这3件事。
故事解读:
其实这张小纸条就是一个消息队列中间件,我们可以当它是RabbitMQ, 而你爸爸就是消息的生产者,你是消息的消费者。
正如你爸爸(消息生产者)通过小纸条(消息队列)让你(消息消费者)完成了3件事。
程序A(消息生产者)也可以通过RabbitMQ(消息队列) 让其它程序(消息消费者)去做事。
没错,这就是我们接下来要接触的RabbitMQ,一款消息队列中间件
二、RabbitMQ的诞生和概念
消息队列的由来:
分布式系统已成为当前系统架构的主流, 而消息队列在分布式系统中作为消息中间件,能为分布式系统中各个应用提供会话平台, 比如:连接PHP和java(比如上面这个故事中的爸爸和儿子)。
其次,用多进程异步操作取代单进程同步操作, 从而满足高性能系统架构需求。比如爸爸通过消息队列让儿子帮他洗碗,那么爸爸的办事效率是不是高了很多? 同样的,比如双十一你到淘宝去下个单,可能感到不卡了,其实淘宝的下单进程已经把很多订单相关逻辑交给其它进程去处理了,那么下单进程就会很快。
再其次,可以防止服务器一下子做很多事情。消息队列采用队列的形式,消费者读取队列里面的消息的时候是一条一条读取的,服务器不会超负载。比如上面故事中的儿子,不是 收碗筷 擦饭桌 拖地一起干,二是按着消息队列的顺序一件一件干,这样儿子不会超负载,服务器也是如此。
原来消息队列这么牛X,升职加薪的必修课,非常值得学习。
消息队列的概念:
从上面消息队列的由来,可以进一步大致了解下消息队列的概念:
消息队列中间件是分布式系统中重要的组件,主要解决 应用解耦、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构。
消息队列的种类:
目前使用较多的消息队列有ActiveMQ、RabbitMQ、Redis的list和订阅、ZeroMQ、Kafka、阿里的RocketMQ等等等........(还有很多)这里就不一 一列举了,现在要学的是这其中应用较广泛部署较容易的一种:RabbitMQ。
三、RabbitMQ的AMQP协议
RabbitMQ采用了AMQP协议,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
图解AMQP协议 如下图所示:
生产者(Producer)(即 上图中的生产者):发送消息的应用。
消费者(Consumer)(即 上图中的消费者):接收消息的应用。
队列(Queue)(即 上图中的queue):存储消息的缓存,一个队列queue存多条消息。
消息(Message):由生产者通过RabbitMQ发送给消费者的信息,消息存储在消息队列queue中。
连接(Connection):连接RabbitMQ和应用服务器的TCP连接(上图中发送消息和接收消息都是必须先建立连接的)。
通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
交换机(Exchange)(即 上图中的交换机):生产者发送消息是先发到交换机,再由交换机发送到队列里面,并最终保存在队列里面。就好比寄快递,台湾寄到长沙,可能要先寄到上海,那么上海就是这个交换机。一个交换机可以绑定一个或多个队列,而每个RabbitMQ中也可以有多个交换机。
绑定(Binding):绑定是队列和交换机的一个关联连接。
路由键(Routing Key)(即 上图中的Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。
用户(Users):在RabbitMQ里,是可以通过指定的用户名和密码来进行连接的。每个用户可以分配不同的权限,例如读权限,写权限以及在实例里进行配置的权限。
四、RabbitMQ安装和启动
4.1、安装erlang环境
①、新增文件/etc/yum.repos.d/rabbitmq_erlang.repo,在文件里面新增下面内容并保存:
[rabbitmq_erlang] name=rabbitmq_erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [rabbitmq_erlang-source] name=rabbitmq_erlang-source baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300
②、在控制台(终端)输入
yum install -y erlang --nogpgcheck # 如果不加--nogpgcheck参数 可能会因为公钥没有安装 而导致erlang安装失败, 所以 还是加个 --nogpgcheck参数来禁止检查gpg签名
至此,erlang环境安装完成,可以在控制台(终端)使用 erl 命令或 erl -version 命令 查看erlang相关的信息
4.2、安装RabbitMQ
①、下载rpm包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.1/rabbitmq-server-3.8.1-1.el7.noarch.rpm
PS:由于众所周知的原因,如果wget失败,可以找个好点的网络下载下来,然后上传到服务器去
②、安装rpm包
yum install -y rabbitmq-server-3.8.1-1.el7.noarch.rpm
4.3、rabbitmq服务的启动和停止
rabbitmq服务的 启动方式有以下几种:
①、rabbitmq-server start 直接在前台以控制台方式启动 当该窗口关闭或者按ctrl + c 或者 rabbitmqctl stop 则rabbitmq服务停止
②、rabbitmq-server -detached 后台的方式启动rabbitmq服务
③、rabbitmq-server & 启动rabbitmq服务 并在后台运行
rabbitmq服务的停止:
rabbitmqctl stop
4.4、将rabbitmq加入开机启动:
chkconfig rabbitmq-server on
4.5、查看rabbitmq的状态
rabbitmqctl status
4.6、启用web管理插件,这样才能支持浏览器访问rabbitmq服务
rabbitmq-plugins enable rabbitmq_management
4.7、添加远程访问web管理台用户 并 授权用户所属角色
rabbitmqctl add_user test 123456 # 增加test用户,密码为123456 rabbitmqctl set_user_tags test administrator # 添加test角色为administrator角色 在rabbitmq中administrator相当于mysql的root用户,所以administrator在rabbitmq中拥有最高权限 rabbitmqctl set_permissions -p "/" test ".*" ".*" ".*" # 给test用户授权 具有/这个虚拟机中所有资源的配置、写、读权限以便管理其中的资源 虚拟机相当于mysql中的dbname(数据库名称) rabbitmqctl list_users # 查看用户是否已添加
4.8、输入ip:15672进行访问
管理控制台可以成功访问,那么我们输入用户名密码,点击login,我们成功进入到rabbitmq的web端 管理页面:
PS:注意下防火墙的配置,比如 防火墙开通相关端口,或者直接粗暴一点 关闭防火墙服务。另外 如果是阿里云、腾讯云、华为云、等第三方的云服务器,记得去安全组开放15672端口
五、web端 管理控制台UI界面的简单介绍
好了,其它的自己多点击几下 多测试下 英文看不懂就借助下翻译词典 很快就上手熟悉使用了
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论