消息中间件MQ
消息队列 MQ (message queue)
消息队列:把传输的数据放在队列中
MQ可以通过消息的收发,使多个系统之间不局限于同步调用,通过异步调用更好的实现解耦,流量削峰等
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合,可靠投递,广播,流量控制,最终一致性等一系列功能,成为异步rpc的主要手段之一。RPC(远程过程调用)。当今市面上有很多主流的消息中心中间件,如老牌的ActiveMQ。RabbitMQ,Kafka,RocketMQ
消息中间件组成
1 Broker
消息服务器,作为server提供消息核心服务
2 Producer
消息生产者,业务的发起方,负责生产消息传输给broker
3 Consumer
消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
4 Topic
主题,发布订阅模式下的消息同意汇聚地,不同生产者像topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
5 Queue
队列,PTP(点对点point to point)模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收
6 Message
消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输
rabbitmq集群
rabbitmq搭建集群
1在集群节点主机hosts文件加入各个节点
2cookie同步
在管理机器集群主节点上将/var/lib/rabbitmq/.erlang.cookie传到其余节点
3rabbitmq重启
在四台机器上分别执行
rabbitmqctl stoprabbitmq-server -detached
4节点加入集群
在各个节点执行
rabbitmqctl stop_app
rabbitmqctl resetrabbitmqctl join_cluster 主节点名称
rabbitmqctl start_app
5管理机器上执行镜像模式
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
6查看集群的状态rabbitmqctl cluster_status
查看rabbitmq集群状态
rabbitmqctl cluster_status
修改rabbitm集群某一节点的存储方式
rabbitmqctl stop_app
rabbitmqctl --node rabbit@ACS-MQ-P01 change_cluster_node_type ram/disc
rabbitmqctl start_app
rabbitmq集群剔除节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status //可以看到节点已经脱离集群
节点接入集群
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbitmq-node1
rabbitmqctl start_app
rabbitmq添加用户
rabbitmqctl add_user mq 123456
增加访问权限
rabbitmqctl set_permissions -p "/" mq ".*" ".*" ".*"
查看vhost(/)允许哪些用户访问
rabbitmqctl list_permissions -p /
列出该用户的访问权限;
list_user_permissions <username>