消息列队

消息列队

Scroll Down

消息列队

简介

“消息队列”是在消息的传输过程中保存消息的容器。
RabbitMQ的基础框架

理论讲解

rabbitmq:AMQP advance message queuing protocol
Redis:10k大小是分水岭
MemcacheQ:支持多条列队/并发性能好
MSMQ:最大的数据体积4M,能承载任何消息的请求
zeroMQ:最快的消息列队,高吞吐量/低延迟---在金融界应用的非常多,缺点就是非持久化列队
Kafka:能将消息分散到不同的节点上,高吞吐量可达到10万每秒。
ActiveMQ:java世界的中坚力量,消耗低,中间件中的瑞士军刀

exchange:消息交换机,指定消息按照什么规则路由到哪个列队
Queue:消息的载体每个消息都会被投入到一个或多个列队中
binding:绑定,把Exchange和Queue按照一定的规则绑定起来
Routingkey:路由关键字,exchange根据这个关键字进行消息投递
Connection:是一个TCP的连接
Channel:虚拟连接,在Connection建立之后建立。真正传输消息
Vhost:虚拟主机,划分权限,且每个vhost之间时独立的。
1、客户端用一个TCP建立连接,然后打开一个channel
2、客户端声明了一个Exchange,并设置相关属性
3、客户端声明一个Queue,并设置相关属性
4、客户端使用Routing key 在exchange和queue之间绑定关系
5、客户端投递消息到exchange

做持久化要求:
exchange、queue、message三个同时开启持久化才生效

client:
生产消息producerA producerB
订阅消息consumerA consumerB

消息ACK机制:
什么时真确的接收?通过ACK
1、每个message都要被ACK(只保证一个人准确无误的收到消息,不保证所有人)
2、如果有message消息没有被ACK则被投递到下一个consumer
3、如果一次未恢复ACK,则不会再次收到message
4、ACK机制可以起到限流的作用

实验步骤

首先要一个lnmp环境

先安装rabbitmq-c并编译

tar -zxvf rabbitmq-c-0.7.1.tar.gz        
cd rabbitmq-c-0.7.1
./configure --prefix=/usr/local/rabbitmq-c
make && make install

之后打amqp模块

gunzip amqp-1.6.1.tgz
tar xvf amqp-1.6.1.tar 
cd amqp-1.6.1

安装依赖

yum -y install autoconf
phpize                       #不打这个命令不能用 ./configure 命令   
./configure  --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c/
make && make install

添加模块

vim /usr/local/php/php.ini 
extension=amqp.so

重启php

service php-fpm restart

写入phpinfo主页

vim /usr/local/nginx/html/index.php
<?php
	phpinfo();
	?>

访问查看添加成功没有

firefox 192.168.1.1/index.php
单机安装rabbit
rpm -qa | grep erlang    #假如有这个服务就rpm  -e nodeps卸载

按顺序安装

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 

启动服务

service rabbitmq-server start   
Chkconfig  --add rabbitmq-server  
chkconfig rabbitmq-server on
chkconfig rabbitmq-server --list
rabbitmqctl add_user admin redhat   #这个是设置用户名密码  admin用户   redhit密码
rabbitmqctl set_user_tags admin administrator     #将你创建的用户admin加入管理员组  
rabbitmq-plugins enable rabbitmq_management   #启动rabbitmq的管理功能
第二节点
Rabbitmqctl  stop_app
Rabbitmqctl join_cluster  --ram  rabbit@rabbit1
Rabbitmqctl start_app
第三节点
Rabbitmqctl  stop_app
Rabbitmqctl join_cluster  --ram  rabbit@rabbit1
Rabbitmqctl start_app
第一节点
Rabbitmqctl  cluster_status
rabbitmqctl add_user admin redhat   #这个是设置用户名密码  admin用户   redhit密码
rabbitmqctl set_user_tags admin administrator     #将你创建的用户admin加入管理员组  
rabbitmq-plugins enable rabbitmq_management  #启动rabbitmq的管理功能
Rabbitmqctl   cluster——status    #查看群集节点的状态
RabbitMQ的群集

完全依赖erlang的cluster,erlang.cookie权限必须是400
集群方式:
1、普通模式:
2、镜像模式:
ha-mode
all:数据镜像到所有节点
exactly:数据镜像到随机节点
nodes:数据镜像到指定节点

集群节点:
1、内存节点:对外提供服务
2、磁盘节点:做持久化更好
多台主机安装rabbitMQ搭建集群:
清除防火墙

vim /etc/hosts
192.168.1.10 rabbitmq1
192.168.1.20 rabbitmq2
192.168.1.30 rabbitmq3

确保主机名必须能够ping通
创建erlang的cookie

vim /var/lib/rabbitmq/.erlang.cookie #三台主机的cookie值必须一样。

必须手动重启 重启之后修改的主机名生效
主节点:
rabbitmqctl stop_app
ra... reset

... start_app (返回节点地址)
.... cluster_status 查看集群状态(只有主节点能够查看)

client:客户端加入集群

rabb... stop_app
.... reset
.... join_cluster --ram(内存模式,不加默认为磁盘模式) 节点地址 加入集群
..... start_app

图形化管理
创建集群用户

... add_user admin 123.com
.... set_user_tags admin administrator
rabbit-plugins enable rabbitmq_management

client:

rabbit-plugins enable rabbitmq_management

访问验证

firefox http://192.168.1.20:15672

登录rabbitmq
添加vhost
在这里插入图片描述
添加策略
在这里插入图片描述
添加列队
在这里插入图片描述
推送消息
在这里插入图片描述
查看消息是否镜像

ls /var/lib/rabbitmq/mnesia/rabbit\@rabbitmq1/queues

HECKMQIQFCQCVEIFPVTH

完结撒花