RabbitMQ

消息中间件的两种模式

1.P2P模式

  • 每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列中
  • 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行它不会影响到消息被发送到队列
  • 接收者在成功接收消息之后需向队列应答成功
  • 如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式

2.Pub/Sub模式

  • 每个消息可以有多个消费者
  • 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
  • 为了消费消息,订阅者必须保持运行的状态
  • 如果希望发送的消息可以不被做任何处理、或者只被一个消费者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

RabbitMQ

一个在 AMQP基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

部署RabbitMQ

1.安装Erlang

wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
yum install erlang-solutions-1.0-1.noarch.rpm
rpm --import http://packages.erlang-solutions.com/rpm/erlang_solutions.asc
yum install erlang -y

2.安装RabbitMq

cat >> /etc/yum.repos.d/rabbitmq.repo <<EOF
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
yum install rabbitmq-server

3.启动

systemctl enable rabbitmq-server
systemctl start rabbitmq-server

4.设置远程登陆

cp /usr/share/doc/rabbitmq-server-3.7.28/rabbitmq.config.example /etc/rabbitmq/
mv /etc/rabbitmq/rabbitmq.config.example    /etc/rabbitmq/rabbitmq.config
vim /etc/rabbitmq/rabbitmq.config
==>> {loopback_user,[]}

5.开启WEB登陆

rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server

6.添加Admin账户

rabbitmqctl add_user admin 111111
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

7.登录Web管理界面

http://localhost:15672 (guest guest默认账户只能本地访问)

部署 RabbitMQ Cluster

模式

  • 普通模式
  • 镜像模式

普通模式:从节点为队列结构,当消息进入slave1 节点的 Queue 后,consumer 从slave2节点消费时,RabbitMQ 会临时在 slave1、slave2 间进行消息传输,把 slave21中的消息传给slave2最后给consumer。

镜像模式:消息实体会主动在镜像节点间同步

1.修改Hosts

cat >> /etc/hosts <<EOF
192.168.188.8 rm1
192.168.188.9 rm2
192.168.188.10 rm3
EOF
hostnamectl set-hostname rm1
hostnamectl set-hostname rm2
hostnamectl set-hostname rm3

2.安装Erlang Socat RabbitMq(同上)

yum -y install socat

3.搭建一般模式集群

<1>.统一erlang.cookie 文件中 cookie 值

chmod 600 /var/lib/rabbitmq/.erlang.cookie   
scp /var/lib/rabbitmq/.erlang.cookie   192.168.188.9:/var/lib/rabbitmq/.erlang.cookie 
scp /var/lib/rabbitmq/.erlang.cookie   192.168.188.10:/var/lib/rabbitmq/.erlang.cookie 

<2>.添加节点

重启 rm1机器中服务 在 rm2 rm3 分别执行

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rm1
rabbitmqctl start_app
 rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server

<3>.查看状态

rabbitmqctl status

4.搭建镜像集群

在普通模式下 任意节点

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

发表评论