博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux安装rabbitMQ后在PHP中的操作
阅读量:3923 次
发布时间:2019-05-23

本文共 4322 字,大约阅读时间需要 14 分钟。

一、前言

在Linux上安装rabbitMQ,并通过浏览器访问控制台,在php中操作rabbitMQ。

二、安装rabbitMQ

rabbitMQ是用Erlang语言编写的,所以安装rabbitMQ需要先安装Erlang,安装完Erlang后在去安装rabbitMQ(两步走)。

2.1 查看版本兼容性(必须)

如果 Erlang 版本和 rabbitMQ 版本不兼容,则无法启动。安装前一定要看下版本的兼容性。

戳我:

在这里插入图片描述

2.2 安装Erlang

在安装前先更新下系统:

yum -y update

Erlang在默认的YUM存储库中不可用,所以需要安装EPEL存储库:

yum -y install epel-releaseyum -y update

安装Erlang:

yum -y install erlang socat

查看版本:

erl -version

2.3 安装rabbitMQ

找到和 Erlang 兼容的版本:,下载后缀为 rpm 的文件。

在这里插入图片描述

例如,我的 Erlang 所兼容的rabbitMQ版本地址为(举例子,请严格参考上述网站的版本兼容信息):

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.18/rabbitmq-server-3.8.18-1.el7.noarch.rpm

下载rpm文件:

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.18/rabbitmq-server-3.8.18-1.el7.noarch.rpm

导入GPG密钥:

rpm –import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

运行RPM安装RPM包:

rpm -Uvh rabbitmq-server-3.8.18-1.el7.noarch.rpm

其中,rabbitmq-server-3.8.18-1.el7.noarch.rpm 一定要是你下载的 rpm 文件地址。

三、启动和停止rabbitMQ

开启前,请确保15672端口是否开放,如未开放,请去防火墙或服务商安全组中开放。

#启动服务systemctl start rabbitmq-server.service #设置开机启动systemctl enable rabbitmq-server.service #停止开机启动systemctl disable rabbitmq-server.service #重新启动服务systemctl restart rabbitmq-server.service #查看服务当前状态systemctl status rabbitmq-server.service #查看所有已启动服务systemctl list-units --type=service

四、访问Web管理控制台

启动web控制台:

rabbitmq-plugins enable rabbitmq_management

给RabbitMQ用户提供所有权:

chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/

给RabbitMQ Web控制台创建管理用户:

rabbitmqctl add_user admin passwordrabbitmqctl set_user_tags admin administratorrabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

将 admin 设置为首选用户。

其中,admin为用户名,password为密码,其中用户名guest,密码guest为默认用户名和密码。

访问你的ip地址:端口号,例如我的:http://122.23.63.419:15672

在这里插入图片描述

在这里插入图片描述

至此,rabbitMQ安装完毕。


如果你需要在php中操作rabbitMQ,请继续往下看,否则,只看上述部分即可。


五、PHP中操作rabbitMQ

php操作 rabbitMQ需要安装以下扩展 amqp 扩展,但是安装 amqp扩展前需要安装 rabbitmq-c。

5.1 安装 rabbitmq-c

wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gztar zxf rabbitmq-c-0.8.0.tar.gzcd rabbitmq-c-0.8.0./configure --prefix=/usr/local/rabbitmq-c-0.8.0make && make install

5.2 安装amqp

wget -c http://pecl.php.net/get/amqp-1.9.3.tgztar zxf amqp-1.9.3.tgzcd amqp-1.9.3/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0make && make install

5.3 修改php.ini配置文件

extension = amqp.so

安装好后重启下fpm。

使用 php -m 查看是否安装成功:

[root@VM-8-5-centos ~]# php -m[PHP Modules]amqpbcmathCorectypecurldatedomeventfileinfofilterftpgdgettexthashiconvintljsonlibxmlmbstringmysqlimysqlndopensslpcntlpcrePDOpdo_mysqlpdo_sqlitePharposixReflectionsessionshmopSimpleXMLsoapsocketssodiumSPLsqlite3standardswoolesysvsemtokenizerxmlxmlreaderxmlrpcxmlwriterzipzlib[Zend Modules]

5.4 在php中的使用

server.php(生产):

connect()) {
die("Cannot connect to the broker!\n");}//在连接内创建一个通道$channel = new AMQPChannel($conn);//创建交换机$ex = new AMQPExchange($channel);$ex->setName($e_name);//设置交换机类型$ex->setType(AMQP_EX_TYPE_DIRECT);//设置交换机持久$ex->setFlags(AMQP_DURABLE);//声明交换机并输出状态echo "Exchange Status:" . $ex->declareExchange() . "\n";//创建队列$q = new AMQPQueue($channel);$q->setName($q_name);//设置队列持久$q->setFlags(AMQP_DURABLE);//声明消息队列并输出状态echo "Message Total:" . $q->declareQueue() . "\n";//绑定交换机与队列,并指定路由键echo 'Queue Bind: ' . $q->bind($e_name, $k_route) . "\n";//阻塞模式接收消息echo "waiting reeive Message...\n";//接收消息并进行处理的回调方法function processMessage($envelope, $queue){
//取消息内容 $msg = $envelope->getBody(); // echo $msg . "\n"; //处理消息 //显式确认,队列收到消费者显式确认后,会删除该消息 print_r($envelope->getDeliveryTag()); $queue->ack($envelope->getDeliveryTag());}//设置消息队列消费者回调方法,并进行阻塞$q->consume('processMessage');//下面是隐式确认,不推荐//$q->consume('processMessage', AMQP_AUTOACK);$conn->disconnect();

client.php(消费):

connect()) {
die("Cannot connect to the broker!\n");}$channel = new AMQPChannel($conn);//创建交换机对象$ex = new AMQPExchange($channel);$ex->setName($e_name);$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型$ex->setFlags(AMQP_DURABLE); //持久化$ex->declareExchange();//发送消息//$channel->startTransaction(); //开始事务for ($i = 0; $i < 1115; ++$i) {
sleep(1); //休眠1秒 //消息内容 $message = "TEST MESSAGE!" . date("h:i:sa"); echo "Send Message:" .$i.",发送状态". $ex->publish($message, $k_route) . "\n";}//$channel->commitTransaction(); //提交事务$conn->disconnect();

在cli下,开两个窗口,运行这两个文件即可,配合着web控制台管理。

转载地址:http://irkgn.baihongyu.com/

你可能感兴趣的文章
【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0
查看>>
为什么人和人的差距这么大?
查看>>
ML.NET 推荐引擎中一类矩阵因子分解的缺陷
查看>>
微软2020开源回顾:止不住的挨骂,停不下的贡献
查看>>
说说 RabbiMQ 的应答模式
查看>>
OpenTelemetry - 云原生下可观测性的新标准
查看>>
使用 ML.NET 实现峰值检测来排查异常
查看>>
通过 .NET NativeAOT 实现用户体验升级
查看>>
如何友好的处理 WebApi 中抛出的错误
查看>>
因MemoryCache闹了个笑话
查看>>
Dotnet的垃圾回收
查看>>
乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时
查看>>
gRPC在C#中的未来属于grpc-dotnet
查看>>
快速排序的性能和名字一样优秀
查看>>
开源推荐:Asp.Net Core入门学习手册!
查看>>
ML.NET 示例:对象检测
查看>>
C#基于yolov3的行人检测
查看>>
ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?
查看>>
WPF 修改(优化)Menu菜单的样式
查看>>
晕了!这个配置值从哪来的?
查看>>