1.RabbitMq的基础概念
- publisher:生产者,用于生产消息。
- consumer: 消费者,用于消费消息。
- exchange:交换机,用于投递消息的。生产者将消息交给交换机,交换机讲消息放到队列。相当于邮局中邮递员。
- queue:队列,用于存放消息的地方。
- routIngKey: 路由键,生产者指定对应的路由键,该路由键决定将消息给哪个交换机。
- BindIng:将交换机和队列进行绑定。决定着交换机将消息放到哪个队列中。
- virtual host: 虚拟主机,表示一批交换机、队列以及相关对象的集合。虚拟主机是共享相同身份认证和加密数据的独立服务器域。每一个vhost就相当于一个独立rabbitMq服务器,拥有自己的交换机、队列、绑定和权限。默认是/.
- broker: 交换机、绑定、队列 组成的一个消息服务器实体。它相当于是虚拟主机的一个实例对象。
- channel: 信道,用于传递消息的通道。生产者和消费者生产和消费消息时,都是通过信道传输消息的。参考JavaNIO中信道的概念。
- connection:网络连接。比如一个tcp长连接。连接很耗时,所以一般生产者生产消息和消费者消费消息时都会保持一个长连接,然后创建多条信道进行传输消息。
2.RabbitMq的工作流程
工作流程:首先,生产者生产消息,将消息发送到指定的(使用routIngKey和交换机名称进行指定)交换机中。其次,交换机将消息发送到指定的(和交换机使用bindIngKey绑定的队列)队列中。最后,消费者监听指定的队列进行消费消息。
- 消费者监听的队列只要有消息就会进行消费。
- 生产者和消费者发送或者消费消息都会和RabbitMq服务器建立一条长连接。如果消费连接中断,服务器就会监控到,然后把消息进行存储起来。保证消息不丢失。
3.常用交换机
1.direct 精确匹配routIngKey和交换机,点对点的方式
- 一个交换机可以绑定多个队列,如果routingkey 都不相同则是一对一 。如果路由键都相同则和fanout类型相同
2.fanout 将消息发送到和交换机绑定的队列上,广播
- 不需要指定routeKey,给所有该交换机绑定的队列发消息 routeKey设置为空串就行 发送的时候routeKey也是空串
3.topic 模糊匹配routIngKey 模式匹配
- 模式匹配,给匹配的bindIngkey的队列发送指定的消息。
- “#” : 匹配一个或者多个, “*”:匹配一个
4.自定义交换机 延迟队列 原理 利用死信队列超时重新投递到队列
项目源码参考rabbitmq测试源码
4.Linux中安装
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
4.常用命令(按照以下顺序执行)
添加开机启动 RabbitMQ 服务
chkconfig rabbitmq-server on
启动服务
/sbin/service rabbitmq-server start 或者 centos7以后版本 systemctl start rabbitmq-server
查看服务状态
/sbin/service rabbitmq-server status 或者 systemctl status rabbitmq-server停止服务(选择执行)
/sbin/service rabbitmq-server stop 或者 systemctl stop rabbitmq-server开启 web 管理插件
rabbitmq-plugins enable rabbitmq_management开启web管理插件后,用默认账号密码(guest)访问地址 http://47.115.185.244:15672/出现权限问题
解决方案
添加一个新的用户
创建账号
命令 rabbitmqctl add_user admin 123 备注 rabbitmqctl add_user admin (用户名) 123 (密码)
设置用户角色
命令 rabbitmqctl set_user_tags admin administrator 备注 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重置命令
关闭应用的命令为 此应用指当前的rabbitmq服务器节点 默认只有一个节点
rabbitmqctl stop_app
清除的命令为 将rabbitmq中设置的用户数据重置rabbitmqctl reset
重新启动命令为
rabbitmqctl start_app