RabbitMQ

我只是一个虾纸丫 提交于 2020-03-02 04:28:16
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
 
 
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
 
 
  1. 先启动双方的RabbitMQ
  2. 复制 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
  3. 粘贴到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
  4. 重启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
 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!