什么是消息队列
- 消息 指的是应用之间传输的数据
- 消息队列 应用之间通信的一种方式
为什么要用消息队列
消息的发布者不知道谁接受的,消息的接收者不需要知道谁发出的,两者都不需要知道互相之间的存在
异步协作机制
就像是,快递员与菜鸟驿站
RabbitMQ特点
使用Erlang语言开发的一个AMQP开源
AMQP:Advanced Message Queue ,高级消息队列协议。应用层。方便中间件设计。(一种标准,不受语言限制,符合标准就可以)
- 集群
- 高可用
- 灵活路由
- 管理界面
- 跟踪机制
- 可靠性
RabbitMQ的安装
1、安装Erlong
2、安装RabbitMQ
RabbitMQ的启动和关闭
- 启动RabbitMQ
rabbitmq-server start &
[root@rabbit1 ~]# rabbitmq-server start &
[1] 1732
[root@rabbit1 ~]#
RabbitMQ 3.3.5. Copyright (C) 2007-2014 GoPivotal, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: /var/log/rabbitmq/rabbit@rabbit1.log
###### ## /var/log/rabbitmq/rabbit@rabbit1-sasl.log
##########
Starting broker... completed with 0 plugins.
[root@rabbit1 ~]#
报错处理
这里如果出现报错 可能是/var/lib/rabbitmq/.relang.cookie无权限
解决方案,chown或者chmod
- 关闭RabbitMQ
rabbitmq-server stop
RabbitMQ插件管理
- 添加插件
rabbitmq-plugins enable {插件名}
- 删除插件
rabbitmq-plugins disable {插件名}
- 开启浏览器控制面板
rabbitmq-plugins enable rabbit_management
访问地址 http://IP:15672
但登录不进去,因为没用户
- 添加用户 rabbitmqctl add_user username password
[root@rabbit1 ~]# rabbitmqctl add_user root root
Creating user "root" ...
...done.
- 删除用户 rabbitmqctl delete_user username password
- 更改密码 rabbitmqctl change_password username password
- 设置用户角色 rabbitmqctl set_user_tag username tags
[root@rabbit1 ~]# rabbitmqctl set_user_tags root administration
Setting tags for user "root" to [administration] ...
...done.
tag可以取的值: management monitoring policymarker administator
FROM : https://www.cnblogs.com/iiwen/p/5287790.html
RabbitMQ各类角色描述:
none
不能访问 management plugin
management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections
RabbitMQ权限管理
- 授权 rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
-p vhostpath : 一个命名空间 ,eg: -p / 表示根命名空间
{user} 用户名
{conf} 一个正则表达式match ,哪些资源能够被用户配置
{write} 一个正则表达式match,哪些资源能够被用户读取
{read} 一个正则表达式match,哪些资源能够被用户访问
- 查看权限 rabbitmqctl list_permissions vhostpath
查看根路径下的用户权限
rebbitmqctl list_permissions
查看指定命名空间下的所有用户权限
rabbirmqctl list_permissions /abc
- 查看指定用户的权限 rabbitmqctl list_user_permissions {username}
- 清空指定用户的权限 rabbitmqctl clear_permissions {username}
[root@rabbit1 ~]# rabbitmqctl clear_permissions root
Clearing permissions for user "root" in vhost "/" ...
...done.
- vhost管理:vhost类似于windows内的文件夹,在每个文件夹中存放不同的东西
rabbitmqctl add vhost abc
rabbitmqctl delete vhost abc
RabbitMQ消息订阅和发送机制
消费者订阅队列,生产者发送消息,然后发布到队列,最后将消息发送给消费者,