mq的作用
- 解耦
- 冗余 保证数据安全,不丢失数据
- 流量削峰
- 保证顺序
- 异步通信
windows 下载安装
- 下载安装erlang语言环境 otp_win64_21.0.1.exe,安装过程一直下一步直到完成就可以了
- 下载安装rabbitMQ rabbitmq-server-3.7.7.exe,也是一直下一步直到完成
- 激活mq控制台 cd sbin ,rabbitmq-plugins.bat enable rabbitmq_management
- 浏览http://localhost:15672/, 登录账号/密码 guest/guest
基本概念
linux 下载安装
linux 下的常用命令
- rabbitmq-server 前台启动服务
- rabbitmq-server-detached 后台启动服务
- rabbitmqctl stop 停止服务
- rabbitmqctl start_app 恢复应用
- rabbitmqctl stop_app 停止应用,但是不停止服务
- rabbitmqctl add_user {username} {password} 创建用户
- rabbitmqctl delete_user {username}
- rabbitmqctl change_password {username} {newpassword}
- rabbitmqctl ser_user_tags {username} {tag} 授予用户角色
10.rabbitmqctl set_permissions -p / user_admin ‘.’’.’’.*’ 设置允许访问的vhost
6种模式
1. hello world :一对一,只是用于测试,学习mq
2. work queue :它会发送一些耗时的任务给多个工作者(worker).在多个消息的情况下,work queue 会将小安溪分派给不同的消费者,每个消费者都会接收到不同的消息,并且可以根据处理消息的速度来接收消息的数据量,进而让消费者程序发挥最大性能.work queue特别适合在集群环境中做异步处理,能最大程度发挥每台机器的性能.
3. 发布/订阅模式 发布/订阅模式中,生产者不再直接与队列绑定,而是将数据发送至"交换机(exchange)" 交换机用于将数据按某种规则送入与之绑定的队列,进而供消费者使用.发布/订阅模式中,交换机将无差别的将所有消息送入与之绑定的队列,所有消费者拿到的消息完全相同,交换机的类型被称为fanout
4. 路由(Routing)模式是在发布订阅模式基础上的变种.发布订阅模式是无条件将所有消息分发给所有消费者队列.路由模式则是交换机根据Routing Key 有条件的将数据筛选后发送给消费者队列.路由模式下交换机的类型被称为direct
5. topic 模式 是在routing模式的基础上,提供了对RouteKey模糊匹配的功能,可以简化程序的编写.主题模式下,模糊匹配表达式规则为 * 匹配你单个关键字,#匹配所有关键字.主题模式下交换机的类型被称为topic.
6. rpc 这个用的非常少,真的要用到rpc 也不会用RabbitMQ的
消息确认机制 confirm 与 return
confirm 代表生产者将消息送到Broker时产生的 状态,后续出现两种情况:
-ack 代表Broker已经将数据接收.
-nack 代表Broker拒收消息.原因有很多,比如队列已满,限流,io异常…
Return 代表消息被Broker正常接收(ack)后,但是Broker没有对应的队列进行投递时产生的状态,消息被退回给生产者.
注意:上面两种状态只代表生产者与Broker之间的消息投递情况.与消费者是否接收/确认消息无关.
RabbitMQ 集群架构模式
主备模式(Warren)
实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好 用且简单
镜像模式(Mirror)
集群模式非常经典的及时mirro镜像模式,保证100%数据不丢失,在实际工作中也是用得最多的.并且实现集群非常的简单,一般互联网大厂都会构建这种镜像集群模式
远程模式(Shovel)
远程模式可以实现双活的一种模式,简称shovel模式,所谓shovel就是我们可以把消息进行不同数据中心的复制工作,我们可以跨地域的让两个mq集群互联
多活模式(Federation)
这种模式也是实现异地数据复制的主流模式,因为shovel模式配置比较复杂,所以一般来说实现异地集群都是使用这种双活或者多活模型来实现的.这种模型需要依赖rabitmq的federation插件,可以实现持续的可靠的amqp数据通信,多活模式在实际配置与应用非常的简单