2.RabbitMQ概述、安装及常用命令

2.RabbitMQ

2.1RabbitMQ 的概念

RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。 RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,在·存储和转发消息数据

15672是rabbitMQ网页管理监听端口,5672是客户端使用的端口

2.2四大核心概念

1.生产者
产生数据发送消息的程序是生产者
2.交换机
交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定
3.队列
队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式
4.消费者
消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。 请注意生产者,消费者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。

2.3RabbitMQ 核心部分

Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。
Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker,表示消息队列服务器实体
Virtual host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。
Connection:publisher/consumer 和 broker 之间的 TCP 连接
Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。
Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别。
Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。Exchange 和Queue的绑定可以是多对多的关系。
Binding:绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
Message:消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。
Publisher:消息的生产者,也是一个向交换器发布消息的客户端应用程序。


2.4安装

1.官网地址
https://www.rabbitmq.com/download.html
2.文件上传

3.安装文件(分别按照以下顺序安装)

rpm -ivh erlang-21.3-1.el7.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
常用命令(按照以下顺序执行)
添加开机启动 RabbitMQ 服务
chkconfig rabbitmq-server on
启动服务
/sbin/service rabbitmq-server start

启动报错ERROR: epmd error for host 192: badarg (unknown POSIX error)

因为我linux主机的名称是数字的原因造成此问题的。解决方法如下:
首先查看了主机名称
hostnamectl status

接着来设置一下主机名,输入(就是你要设置的主机名):

hostnamectl set-hostname 新主机名

把刚才修改后的名字添加进去就可以,我的问题就是这样解决的。

大佬地址:https://blog.csdn.net/kang_tian/article/details/105719318

查看服务状态
/sbin/service rabbitmq-server status

开启web管理插件前需要先关闭rabbitMQ服务

停止服务(选择执行)
/sbin/service rabbitmq-server stop
开启 web 管理插件
rabbitmq-plugins enable rabbitmq_management
开启web插件后再启动rabbitMQ服务
/sbin/service rabbitmq-server start

访问不到web管理页面需要防火墙放开端口

开放防火墙端口:

添加指定需要开放的端口:
firewall-cmd --add-port=15672/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
查询指定端口是否开启成功:
firewall-cmd --query-port=15672/tcp


2.5用户及权限

用默认账号密码(guest)访问地址 http://{ip}:15672/出现权限问题

2.5.1添加一个新的用户

创建账号
rabbitmqctl add_user admin 123
设置用户角色
rabbitmqctl set_user_tags admin administrator
设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
说明:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
查看当前用户和角色
rabbitmqctl list_users

再次利用 admin 用户登录



2.6常用命令

大佬地址:https://www.cnblogs.com/hanxiaohui/p/8904268.html(请直接查看大佬的博客)

1)启动、关闭 rabbitmq节点和应用

# rabbitmq分别启动节点和应用 应用关闭rabbitmqctl stop_app 应用启动 rabbitmqctl start_app
rabbitmq-server -detached
netstat -lnp | grep beam # 查看端口
rabbitmqctl stop # 应用和节点都将被关闭
rabbitmqctl start_app # 应用启动
rabbitmqctl stop_app # 应用关闭

2)开启rabbitmq控制台

rabbitmq-plugins enable rabbitmq_management
netstat -lnp | grep beam # 查看端口,15672是rabbimq网页管理监听端口,5672是客户端使用的端口

3)用户管理

用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。
(1) 新增一个用户
rabbitmqctl add_user Username Password
(2) 删除一个用户
rabbitmqctl delete_user Username
(3) 修改用户的密码
rabbitmqctl change_password Username Newpassword
(4) 查看当前用户列表
rabbitmqctl list_users
例:
添加rabbitmq控制台管理员用户
rabbitmqctl add_user admin admin # 添加用户,前一个admin是用户名,后一个admin是密码
rabbitmqctl set_user_tags admin administrator # admin设置为管理员
# 可以创建某个项目的专用用户,只能访问项目自己的virtual hosts (user_proj是用户名)
rabbitmqctl set_user_tags user_proj management

4)用户角色

用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
与administrator的对比,administrator能看到这些内容
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。
设置用户角色的命令为:
rabbitmqctl set_user_tags User Tag
User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
也可以给同一用户设置多个角色,例如
rabbitmqctl set_user_tags hncscwc monitoring policymaker

5)用户权限

用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。
相关命令为:
(1) 设置用户权限
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
(2) 查看(指定hostpath)所有用户的权限信息
rabbitmqctl list_permissions [-p VHostPath]
(3) 查看指定用户的权限信息
rabbitmqctl list_user_permissions User
(4) 清除用户的权限信息
rabbitmqctl clear_permissions [-p VHostPath] User

6)vhost操作

rabbitmqctl delete_vhost /
rabbitmqctl add_vhost /
rabbitmqctl list_vhosts
rabbitmqctl set_permissions -p / guest '.*' '.*' '.*' ## 设置用户权限
rabbitmqctl list_permissions -p / ## 列出虚拟主机上的所有权限
rabbitmqctl list_user_permissions guest ## 列出用户权限

7)queue操作

8)集群节点的操作

列出集群状态
rabbitmqctl cluster_status
添加节点
rabbitmqctl stop_app
rabbitmqctl join_cluster {--ram|--disk} rabbit@xxx #默认是disk , xxx是其中一台节点的host
rabbitmqctl start_app
修改节点存储类型
集群中必须存活一个磁盘节点
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type {ram|disk}
rabbitmqctl start_app
将xxx踢除集群
./rabbitmqctl forget_cluster_node rabbit@xxx

9)清空消息

这个方法 会把用户也给清楚了关闭应用:rabbitmqctl stop_app
清空队列:rabbitmqctl reset
重启应用:rabbitmqctl start_app
posted @   Lz_蚂蚱  阅读(119)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起