@rabbitMQ基础理解
rabbitMQ基础理解
rabbitMQ消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
AMQP协议:程序A(生产者 Producer )先创建一个连接(Connection)把消息(Message)推送到中间件rabbitMQ的交换机(Exchange),交换机通过路由键(Routing Key)绑定(Binding)到队列(Queue)中,程序B(消费者 Consumer)也创建一个连接去监听着对应的队列中拉去消息去处理或消费
来张图片理解AMQP协议:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
RabbitMQ安装和启动
1.安装安 erlang环境环
erlang有2种安装方式:
- 1.安装安 erlang环境环
- erlang有2种安装方式:
- 1.1 :新增文件 vim /etc/yum.repos.d/rabbitmq_erlang.repo,在文件里面新增下面内容并保存:
- erlang有2种安装方式:
vim /etc/yum.repos.d/rabbitmq_erlang.repo
[rabbitmq_erlang]
name=rabbitmq_erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck=1
gpgcheck=1
enabled=1 # PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [rabbitmq_erlang-source]
name=rabbitmq_erlang-source baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1 # PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300
- 1.2 :在centos控制台输入
yum install erlang
- 2.安装包安装erlang
– 安装依赖环境
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
下载Erlang
wget http://erlang.org/download/otp_src_21.3.tar.gz
解压,进入解压后的Erlang目录,构建,配置安装
tar -xvzf otp_src_21.3.tar.gz
cd otp_src_21.3
yum install -y autoconf
./otp_build autoconf
./configure
make && make install
配置环境变量,在末尾加上,重新加载环境变量
vim /etc/profile
export ERLANG_HOME=/usr/local/lib/erlang #这里写你电脑上面的路径 export PATH=$PATH:$ERLANG_HOME/bin
source /etc/profile
查看:erl
以上是安装erlang的两种方式
- 安装 rabbitmq
下载安装包并安装
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.1/rabbitmq-server-3.8.1-1.el7.noarch.rpm
yum install rabbitmq-server-3.8.1-1.el7.noarch.rpm
启动,加入开机启动,执行命令,查看rabbitmq的状态
rabbitmq-server start
chkconfig rabbitmq-server on
rabbitmqctl status
5、启用web管理插件,这样子才能支持浏览器访问rabbitmq
rabbitmq-plugins enable rabbitmq_management
设置操作系统字符集utf-8
vim /etc/profile
文件末尾加上:
export LC_ALL=en_US.UTF-8
然后
source /etc/profile
浏览器的访问注意一下端口的开启
PHP的使用初体验:
生产者代码 publisher.php :
<?php
//申明连接参数
$config = [
'host'=>'127.0.0.1',
'vhost'=>'/',
'port'=>5672,
'login'=>'test',
'password'=>'123456'
];
$cnn = new AMQPConnection($config);
//抛出异常
if(!$cnn->connect()){
echo "连接失败";
exit();
}
$cn = new AMQPChannel($cnn);
$ex = new AMQPExchange($cn);
$routingKey = 'key_1';
$exchangeName = 'exchange_1';
$ex->setName($exchangeName);
//设置交换机的类型
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机的持久
$ex->setFlags(AMQP_DURABLE);
//申明交换机
$ex->declareExchange();
for($i=1;$i<=10;$i++){
//消息内容
$msg = [
'data'=>'消息_'.$i,
];
$ex->publish(json_encode($msg), $routingKey
, AMQP_NOPARAM, array('delivery_mode' => 2));
}
消费者代码 consumer.php:
<?php
//申明连接参数
$config = [
'host'=>'127.0.0.1',
'vhost'=>'/',
'port'=>5672,
'login'=>'test',
'password'=>'123456'
];
//连接broker,创建一个rabbitmq连接
$cnn = new AMQPConnection($config);
//抛出异常
if(!$cnn->connect()){
echo "连接失败";
exit();
}
//在连接内创建一个通道
$ch = new AMQPChannel($cnn);
//创建一个交换机
$ex = new AMQPExchange($ch);
//申明路由键
$routingKey = 'key_1';
//申明交换机名称
$exchangeName = 'exchange_1';
//设置交换机名称
$ex->setName($exchangeName);
//设置交换机的类型
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机的持久
$ex->setFlags(AMQP_DURABLE);
//申明交换机
$ex->declareExchange();
//创建一个消息队列
$q = new AMQPQueue($ch);
//设置队列名称
$q->setName('queue_1');
//设置队列的持久
$q->setFlags(AMQP_DURABLE);
//申明消息队列
$q->declareQueue();
$q->bind($ex->getName(), $routingKey);
//接收消息并进行处理回调方法
function receive($envelope, $queue){
sleep(1);
echo $envelope->getBody()."\n";
}
$q->consume("receive");
动手的同时记一下吧