RabbitMQ
Linux平台安装RabbitMQ
-
docker拉取rabbitmq镜像
docker pull rabbitmq
-
启动容器
docker run -d --name rabbitmq2 -p 15672:15672 -p 5672:5672 c20a8529776b
-
开放端口后无法访问,进入容器中执行下面命令
docker exec -it rabbitmq /bin/bash rabbitmq-plugins enable rabbitmq_management
RabbitMQ集群安装
-
启动多个容器
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' c20a8529776b
docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' c20a8529776b
docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' c20a8529776b
-
通过命令使他们加入集群
docker exec -it myrabbit1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit docker exec -it myrabbit2 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@rabbit1 rabbitmqctl start_app exit docker exec -it myrabbit3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@rabbit1 rabbitmqctl start_app exit
-
配置
- name:随意取
- pattern: 队列名字的通配符
- ha-mode:镜像队列提供了三种模式:
- all:全部的节点队列都做镜像;
- exactly:指定镜像队列的节点最高镜像数量;
- nodes:只为指定具体节点配置镜像队列;
- ha-sync-mode :节点之前的同步模式。有自动和手动两种,默认是手动,这里设置为自动。
RabbitMQ常用命令
用户管理
-
添加用户
#rabbitmqctl add_user zhang 123456 rabbitmqctl add_user {username} {password}
-
删除用户
#rabbitmqctl delete_user zhang rabbitmqctl delete_user {username}
-
重置密码
#rabbitmqctl change_password zhang 111111 rabbitmqctl change_password {username} {newpassword}
-
设置用户角色
- administrator(超级管理员):可查看所有信息,并可以对用户、策略进行操作。
- monitoring(监控者):可以查看rabbitmq节点的相关信息。
- policymaker(策略制定者):可以对策略进行管理,但是不可以查看节点相关信息。
- management(普通管理者):无法查看节点信息,也无法对策略进行管理。
#rabbitmqctl set_user_tags zhang administrator rabbitmqctl set_user_tags {username} {tag}
-
设置用户可以访问的vhost
#rabbitmqctl set_permissions -p / zhang '.*' '.*' '.*' rabbitmqctl set_permissions -p / {username} '.*' '.*' '.*'
基本概念
Producer:生产者,消息的提供者
Consumer:消费者,消息的使用者
Message:消息,程序间的通信数据
Queue:队列,消息存放的容器(先进先出)
Vhost:虚拟主机,相当于MQ中的数据库,用于存储队列
RabbitMQ六种工作模式
Hello World模式
工作中不会用到该模式,只是入门演示实例。
Work queues(工作队列模式)
- 在多个消息的情况下,会将消息分派给不同的消费者,每个消费者都会接受不同的消息。可以根据消费者的性能进行权重配置。
- 特别适合在集群环境中做异步处理,最大程度发挥每一台服务器的性能。
Publish/Subscribe(发布/订阅模式)
- 生产者不再直接与队列绑定, 而是将数据发送至“交换机Exchange”。
- 交换机Exchange用于将数据按某种规则送入与 之绑定的队列,进而供消费者使用。
- 发布/订阅模式中,交换机将无差别的将所有消 息送入与之绑定的队列,所有消费者拿到的消息 完全相同,交换机的类型被称为fanout。
Routing(路由模式)
- 路由(Routing)模式是在发布订阅模式 基础上的变种。
- 路由模式则是交换机根据Routing Key有 条件的将数据筛选后发给消费者队列。
- 路由模式下交换机的类型被称为direct。
Topics(主题模式)
- 主题Topic模式是在Routing模式基础上, 提供了对RouteKey模糊匹配的功能,可以 简化程序的编写。
- 主题模式下,模糊匹配表达式规则为 : * 匹配单个关键字 、#匹配所有关键字。
- 主题模式下交换机的类型被称为topic。
RPC
工作中不会使用该模式。
消息确认机制
- RabbitMQ提供了监听器(Listener)来接收消息投递的状态。
- 消息确认涉及两种状态:Confirm与Return。
- 下面两种状态只代表生产者与Broker之间消息投递的 情况。与消费者是否接收/确认消息无关。
Confirm
Confirm代表生产者将消息送到Broker时产生的状态,后续 会出现两种情况:
- ack 代表Broker已经将数据接收。
- nack 代表Broker拒收消息。原因有多种,队列已满,限流,IO异常…
Return
u Return代表消息被Broker正常接收(ack)后,但Broker没 有对应的队列进行投递时产生的状态,消息被退回给生产者。