AMPQ协议:
redis/rabbitMQ:10k以下redis。
MemcacheQ(MCQ):memcache协议。多条列队。支持大数据。
MSMQ:支持最大4MB。简单。
zeroMQ:专项高并发低延迟,用于金融。
kafka:消息分散到不同节点上。大数据中心hadoop。
快速持久化。
高吞吐量(10w/s速率)。
完全分布式。
ActiveMQ:apache。“java世界的中间力量”。
rabbitMQ:协议支持多。硬盘和内存模式,安全稳定。
connection------TCP连接 。
Channel-------虚拟连接。数据流动的位置。 解决tcp连接问题
vhost--------namespace。queue+exchange
不同vhost中的queue可以重复
polic-------写策略。
消息列队的执行过程:
消息列队是如何工作的?
1.客户端producter tcp-rabbit 打开channel。
2.producter声明一个Exchange,并且设置属性。
3.producter声明一个Queue,并设置相关属性。
4.producter使用RoutingKey在Exchange和Queue上绑定。
5.client投递消息到Exchange。
Exchange:三种类型
direct:以Key进行投递,别名交换机。
Fanout:不需要Key。 广播投递到所有列队。
topic:对Key进行模式匹配后进行投递
#:匹配一个或多个词
“”:匹配引号内的词
^:以xx开头的词
消息持久化:
1.Exchange持久化
2.Queue持久化
3.消息持久化
Exchange和Queue是持久化的绑定的消息就是持久化的。
两者有一个是非持久化的,那么就不可以绑定。
集群模式: user/vhost/exchange/queue
1.普通模式:默认的集群模式,工作位置在硬盘。持久化。
消息的实体只有一份。不可丢失。
2.镜像模式:把需要的列队做成镜像,存在多个节点上。
消息多份,实现了备份功能。
副作用:降低系统性能,Mem 30MB。CPU 1%.
集群内部带宽会被损耗。
all:集群内所有节点都复制一份
exactly:指定的节点复制一份
nodes:随机镜像到一个节点位置上。
集群节点:
1.内存节点:只保存在内存中。(镜像模式)
2.磁盘节点:保存所有内容都到磁盘中。(产生者)
集群环境:
首先我们需要在这两台机器上配置好互相的host可以通过主机名进行访问
vim /etc/hosts 内网地址 RabbitMQ-1 内网地址 RabbitMQ-2 service network restart
#在 RabbitMQ-1 能通: ping RabbitMQ-2 #在 RabbitMQ-2 能通: ping RabbitMQ-1
#在 RabbitMQ-1 能通: ping RabbitMQ-2 #在 RabbitMQ-2 能通: ping RabbitMQ-1
yum -y localinstall erlang-solutions-1.0-1.noarch.rpm
yum -y localinstall erlang-18.1-1.el6.x86_64.rpm
yum -y localinstall socat-1.7.2.3-1.el6.x86_64.rpm
yum -y localinstall rabbitmq-server-3.6.6-1.el6.noarch.rpm
- 先启动双方的RabbitMQ
- 复制 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
- 粘贴到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
- 重启RabbitMQ-2 RabbitMQ服务
Cookie我们已经配置好了 接下来需要把两个集群关联起来
对 RabbitMQ-1 节点做如下操作
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app
这个是用来在rabbitmq1上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.
RabbitMQ-2 节点服务配置脚本
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@RabbitMQ-1 rabbitmqctl start_app
可以通过 rabbitmqctl cluster_status 查看到如下状态证明集群已经配置成功
[root@Sunmi-RabbitMQ-1 ~]# rabbitmqctl cluster_status Cluster status of node ‘rabbit@Sunmi-RabbitMQ-1’ … [{nodes,[{disc,[‘rabbit@Sunmi-RabbitMQ-1’]}, {ram,[‘rabbit@Sunmi-RabbitMQ-2’]}]}, {running_nodes,[‘rabbit@Sunmi-RabbitMQ-2’,’rabbit@Sunmi-RabbitMQ-1’]}, {cluster_name,<<“rabbit@Sunmi-RabbitMQ-1”>>}, {partitions,[]}, {alarms,[{‘rabbit@Sunmi-RabbitMQ-2’,[]},{‘rabbit@Sunmi-RabbitMQ-1’,[]}]}]
LNMP环境PHP和rabbitmq:
172 tar -zxvf rabbitmq-c-0.7.1.tar.gz
173 cd rabbitmq-c-0.7.1
174 ls
175 ./configure --prefix=/usr/local/rabbitmq-c
176 make
177 make install
178 cd
179 ls
180 gunzip amqp-1.6.1.tgz
181 ls
182 tar -zcvf amqp-1.6.1.tar
183 tar -zxvf amqp-1.6.1.tar
184 tar -xvf amqp-1.6.1.tar
185 cd amqp-1.6.1
186 ls
187 yum install autoconfig
188 yum install autoconf
189 phpize
190 ls
191 ./configure --help
192 ./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c/
193 make
194 make test
195 make install
196 ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
197 vi /usr/local/php/php.ini
198 /etc/init.d/php-fpm restart
来源:https://www.cnblogs.com/xinzhisuozhi/p/8559616.html