RabbitMQ队列学习笔记《一》
一、什么是消息队列(message queue)?
消息队列(message queue):是在消息传输过程中保存消息的容器,多用于分布式系统之间的通信。发送消息方称为:生产者,消费消息方称为:消费者。
比如:A系统和B系统组合成一个分布式系统,现在需要把A系统的数据推送到B系统,推送数据的方式有两种:
1.B系统主动去A系统远程调用数据

2.通过第三方中间件的间接的完成通信。A先将消息发送到消息队列中间件,B系统再从消息队列中间件获取数据。

二、为什么使用消息队列?
1.系统解耦:提高系统容错性,以及系统可维护性和可扩展性
2.流量削峰:提高系统稳定性,比如:秒杀活动
3.异步提速:提升用户体验和系统吞吐量(单位时间内处理请求的数目)
三、消息队列的劣势?
1.系统可用性降低:系统引入的外部依赖越多,系统稳定性越差。消息队列(MQ)一旦宕机就会对业务造成影响;
2.系统复杂性提高:系统引入消息队列大大增加了系统的复杂度。以前B系统直接远程调用A系统的数据,现在使用消息队列异步调用,可能会造成数据丢失和数据重复消费的额情况;
3.数据一致性问题:假设MQ给A,B,C三个系统发送消息,A和B都发 送消息成功了,C推送消息失败了,怎么去保证A,B,C三个系统数据的一 致性
四、什么情况下使用使用消息队列?
1.生产者不需要从消费者获取返回值。引入MQ之前是直接调用,没有返回值或返回值为空。
2.容许短暂的数据不一致性。
3.根据实际情况,用了MQ确实能达到解耦,异步提速,流量削峰。
五、常见的MQ产品以及相互之间的对比

六、为什么选择使用RabbitMQ?
1.从社区活跃度比较:RabbitMQ,ActiveMQ,ZeroMQ三者中综合来看,RabbitMQ居首位。
2.从持久化消息来比较:ZeroMQ不支持,ActiveMQ和RabbitMQ都支持。消息持久化是指系统在网络异常或者停电等不可预估的情况下宕机了,消息不会丢失的机制。
3.从可靠性,灵活性,集群,事务,高可用,排序,查找问题,可视化管理工具等等来综合比较,RabbitMQ/Kafka最好,ActiveMQ次之,ZeroMQ居末位。
4.高并发性比较:不用想,肯定是RabbitMQ,因为RabbitMQ就是用高并发高可用的Erlang语言编写的。
七、window环境下载和安装 RabbitMQ
1.RabbitMQ是用erlang语言编写的,所以首先要下载erlang,下载地址:https://www.erlang.org/downloads,并安装Erlang程序运行环境:OTP 23.3 Windows 64-bit Binary File (248)/OTP 23.3 Windows 32-bit Binary File (248).根据自己电脑操作系统是32位或者64位选择下载安装。
2.下载并安装RabbitMQ服务器程序(https://www.rabbitmq.com/install-windows.html) rabbitmq-server-3.8.14.exe

3.配置Erlang环境变量和RabbitMQ的环境变量
3.1.此电脑->属性->高级系统设置->环境变量->系统变量找到->path->新建,把erlang和RabbitMQ的安装地址新增进去 
3.2.查看Erlang环境变量是否设置成功,window键+R键,输入cmd,在输入erl,如下图所示看到有版本号就表示设置成功
3.3.查看RabbitMQ环境变量是否设置成功,window键+R键,输入cmd,在输入Rabbitmq-service,如下图所示就表示设置成功
4.安装RabbitMQ可视化插件
4.1.打开cmd可视化命令窗口
4.2.切换到目录:cd D:\Runtime\RabbitMQ Server\rabbitmq_server-3.8.14\sbin
4.3.输入:rabbitmq-plugins.bat enable rabbitmq_management
4.4.成功之后在浏览器输入:http://localhost:15672,管理员账户:guest/guest
八、RabbitMQ常用命令
1.服务管理
启动: rabbitmq-service start
关闭: rabbitmq-service stop
重启: service rabbitmq-server restart
状态: rabbitmqctl status
2.用户管理
新增账号: rabbitmqctl add_user username password
删除用户: rabbitmqctl delete_user username
所有用户: rabbitmqctl list_users
修改密码: rabbitmqctl change_password username newpassword
清除密码: rabbitmqctl clear_password {userName}
3.角色管理
none:无任何角色。新创建的用户的角色默认为 none。
management:可以访问web管理页面。
policymaker: 包含managerment所有权限,并且可以管理策略(Policy)和参数(Parameter)
monitoring: 包含management所有权限,并且可以看到所有链接、信道及节点相关的信息
administartor:包含monitoring所有权限,并且可以管理用户、虚拟机、权限、策略、参数等。(最高权限)
设置用户角色: rabbitmqctl set_user_tags zhaojigang administrator
设置多个角色: rabbitmqctl set_user_tags hncscwc monitoring policymaker
查看用户角色: rabbitmqctl list_users
4.Vhost管理
所有虚拟主机: rabbitmqctl list_vhosts
添加虚拟主机: rabbitmqctl add_vhost vhostname
删除虚拟主机: rabbitmqctl delete_vhost vhostname
5.权限管理
命令格式如下:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
查询所有权限:rabbitmqctl list_permissions [-p VHostPath]
查看用户权限:rabbitmqctl list_user_permissions username
清除用户权限:rabbitmqctl clear_permissions [-p VHostPath] username
6.查看插件
rabbitmq-plugins list
7.监控管理器
启动:rabbitmq-plugins enable rabbitmq_management
关闭:rabbitmq-plugins disable rabbitmq_management
8.应用管理
关闭应用:rabbitmqctl stop_app
启动应用:rabbitmqctl start_app
9.队列管理
查看所有队列:rabbitmqctl list_queues
清除所有队列:rabbitmqctl reset(需要先执行rabbitmqctl stop_app)
强制清除队列:rabbitmqctl force_reset
10.集群管理
查看集群状态: rabbitmqctl cluster_status
摘除节点: rabbitmqctl forget_cluster_node [--offline]
组成集群命令: rabbitmqctl join_cluster <clusternode> [--ram]
修改节点存储形式: rabbitmqctl change_cluster_node_type disc | ram
修改节点名称: rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2 newnode2] [oldnode3 newnode3...]
11.信息查看
查看所有连接:rabbitmqadmin list connections
概述:rabbitmqadmin show overview
查看所有节点 Node:rabbitmqadmin list nodes
查看所有通道 Channel:rabbitmqadmin list channels
查看所有消费者 Consumer:rabbitmqadmin list consumers
查看所有交换机 Exchange:rabbitmqadmin list exchanges
查看所有路由与队列的关系绑定 Binding:rabbitmqadmin list bindings

浙公网安备 33010602011771号