RabbitMQ is lightweight and easy to deploy on premises and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements.
1. 安装: windows安装十分简单,印象中装的过程几乎无障碍,忽略。
centos7安装过程如下:
依赖安装
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel socat
安装erlang,务必在下面的地址下载,之前在官网下载,安装总是有问题,浪费了大把时间。
https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7/
官网下载rabiitmq,rpm安装
rpm -ivh (rpm包)
2. 配置 启动rabbitmq
/bin/systemctl start rabbitmq-server.service
片刻之后,可以查看状态是否active
bin/systemctl status rabbitmq-server.service
cp rabbitmq.config.example /etc/rabbitmq/ cd /etc/rabbitmq/ mv rabbitmq.config.example rabbitmq.config
修改成你想要的配置,然后重启。
3. UI 启动
rabbitmq-plugins enable rabbitmq_management
然后根据配置打开界面
安全性问题,可以禁止外部guest访问,新建账户
rabbitmqctl add_user puresai 12345678 rabbitmqctl set_user_tags puresai administrator
并修改配置:
{loopback_users, [<<”guest”>>]}
重启rabbitmq服务。
4. 简单实例 生产者:
<?php /** * Created by PhpStorm. * User: puresai * Date: 2018/11/5 * Time: 10:39 */ // 配置信息 $config = [ host => localhost, port => 5672, login => sai, password => 123456, vhost=>/ ]; $exName = changes; //交换机名 $route = key; //路由key // 创建连接和channel $conn = new AMQPConnection($config); if (!$conn->connect()) { die("连接失败"); } $channel = new AMQPChannel($conn); //消息内容 $message = "消息测试"; //创建交换机 $ex = new AMQPExchange($channel); $ex->setName($exName); //发送消息,注意持久化也要设置[delivery_mode => AMQP_DURABLE] for($i=0; $i<5; $i++){ echo "Send Message:".$ex->publish($i.:.$message, $route, AMQP_DURABLE, [delivery_mode => AMQP_DURABLE])." "; } $conn->disconnect();
消费者:
<?php /** * Created by PhpStorm. * User: puresai * Date: 2018/11/5 * Time: 10:39 */ $config = [ host => localhost, port => 5672, login => sai, password => 123456, vhost=>/ ]; $exName = changes; //交换机名 $queueMame = queue1; //队列名 $route = key; //路由key // 创建连接和channel $conn = new AMQPConnection($config); if (!$conn->connect()) { die("连接失败"); } $channel = new AMQPChannel($conn); // 创建交换机 $ex = new AMQPExchange($channel); $ex->setName($exName); $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型 $ex->setFlags(AMQP_DURABLE); //持久化,很重要 echo "Exchange Status:".$ex->declare()." "; // 创建队列 $queue = new AMQPQueue($channel); $queue->setName($queueMame); $queue->setFlags(AMQP_DURABLE); //持久化 echo "Message Total:".$queue->declare()." "; //绑定交换机与队列,并指定路由键 echo Queue Bind: .$queue->bind($exName, $route)." "; //阻塞模式接收消息 echo "Message: "; while(True){ $queue->consume(processMessage); } $conn->disconnect(); /** * 消费回调函数 * 处理消息 */ function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg." "; //处理消息 $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答 }
花了些时间,不过弄出来还是感觉不错的。