PHP 安装操作 RabbitMQ消息队列

10 篇文章 0 订阅
1、安装完系统
	网络处理:https://blog.csdn.net/weixin_42612178/article/details/115372359
	nmcli connection show
	nmcli connection modify enp0s3 connection.autoconnect yes ipv4.method auto
	nmcli connection up enp0s3
2、安装rabbitMQ服务
	1.安装erlang
	三、
	参考网址:https://blog.csdn.net/Code__rookie/article/details/122829673
	wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm
	
	
	2.安装rabbitMQ
	wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.13/rabbitmq-server-3.9.13-1.el7.noarch.rpm
	rpm -Uvh rabbitmq-server-3.9.13-1.el7.noarch.rpm
	yum install -y rabbitmq-server
	
	firewall-cmd --zone=public --add-port=25672/tcp
	firewall-cmd --zone=public --add-port=15672/tcp
	firewall-cmd --zone=public --add-port=5672/tcp
	
	#使用这个启动和停止
	rabbitmq-server start
	rabbitmq-server stop
	rabbitmq-server status
	
	ss -tnlp |grep  25672
	kill -9 
	
	# 查看状态
	rabbitmqctl status
	# 停止Erlang上的node节点
	rabbitmqctl stop_app
	# 启动
	rabbitmqctl start_app
	
	#安装Web管理插件
	rabbitmq-plugins enable rabbitmq_management
	# 添加用户以及授权
	rabbitmqctl add_user admin qwaszx
	rabbitmqctl set_user_tags admin administrator
	rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
	
	
	
3、安装Apache
  01. > yum install libtool -y
  02. > wget http://archive.apache.org/dist/apr/apr-1.5.0.tar.gz http://archive.apache.org/dist/apr/apr-util-1.5.3.tar.gz http://heanet.dl.sourceforge.net/project/pcre/pcre/8.34/pcre-8.34.tar.gz https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.37.tar.gz
  03. > tar -zxvf apr-1.5.0.tar.gz -C /usr/local/src/
    03.1 > cd /usr/local/src/apr-1.5.0
	03.2 > ./configure --prefix=/usr/local/apr
	03.3 > make && make install
  04. > cd -
  05. > tar -zxvf apr-util-1.5.3.tar.gz -C /usr/local/src/
        05.1 > cd /usr/local/src/apr-util-1.5.3
	05.2 > ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
	05.3 > make && make install
  06. > cd -
  07. > tar -zxvf pcre-8.34.tar.gz -C /usr/local/src/
        07.1 > cd /usr/local/src/pcre-8.34
	07.2 > ./configure --prefix=/usr/local/pcre --enable-utf8
	07.3 > make && make install
  08. > cd -
  09. > tar -zxvf httpd-2.4.37.tar.gz -C /usr/local/src/
        09.1 > cp -rf /usr/local/src/apr-1.5.0 /usr/local/src/httpd-2.4.37/srclib/apr
	09.2 > cp -rf /usr/local/src/apr-util-1.5.3 /usr/local/src/httpd-2.4.37/srclib/apr-util
	09.3 > cd /usr/local/src/httpd-2.4.37/
	09.4 > ./configure --prefix=/usr/local/httpd-2.4.37 --with-pcre=/usr/local/pcre/ --with-included-apr --enable-module=so --enable-so --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-mpm=prefork
        09.5 > make && make install
  10. > grep -v "#" /usr/local/httpd-2.4.37/bin/apachectl > /etc/init.d/httpd
  11. > vim /etc/init.d/httpd
	#头部加入以下内容,使其支持chkconfig
	#!/bin/sh
	# chkconfig: 2345 85 15
	# description: Apache is a World Wide Web server.
  12. > chmod +x /etc/init.d/httpd
  13. > chkconfig --level 2345 httpd on
  14. > cd -
	#安装依赖
	yum install -y lynx
	#打开防火墙
	firewall-cmd --zone=public --add-port=80/tcp

4、安装php
  00. > yum install re2c perl -y
  01. > wget http://down1.chinaunix.net/distfiles/libxml2-2.6.32.tar.gz http://cn2.php.net/distributions/php-5.6.9.tar.gz
  02. > tar -zxvf libxml2-2.6.32.tar.gz -C /usr/local/src/
	02.1 > cd /usr/local/src/libxml2-2.6.32/
	02.2 > ./configure --prefix=/usr/local/libxml2
	02.3 > make && make install
  03. > cd -
  04. > tar -zxvf php-5.6.9.tar.gz -C /usr/local/src/
	#以下是Apache安装
	04.1 > cd /usr/local/src/php-5.6.9
	04.2 > ./configure --prefix=/usr/local/php-5.6.9 --with-mysql=/usr/local/mysql-5.7.36 --with-apxs2=/usr/local/httpd-2.4.37/bin/apxs --with-libxml-dir=/usr/local/libxml2
	04.3 > make && make install
	#以下是Nginx安装
	04.0 > useradd -M -s /sbin/nologin php-fpm	#若用户php-fpm不存在则创建
	04.1 > cd /usr/local/src/php-5.6.9
	04.2 > ./configure --prefix=/usr/local/php-5.6.9 --with-mysql=/usr/local/mysql-5.7.36 --with-apxs2=/usr/local/httpd-2.4.37/bin/apxs --with-libxml-dir=/usr/local/libxml2 --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm
	04.3 > make && make install
	04.4 > cp /usr/local/php-5.6.9/etc/php-fpm.conf.default /usr/local/php-5.6.9/etc/php-fpm.conf
	04.5 > /usr/local/php-5.6.9/sbin/php-fpm -t
	04.6 > cp /usr/local/src/php-5.6.9/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
	04.7 > chmod 755 /etc/init.d/php-fpm
	04.8 > chkconfig php-fpm on
	04.9 > service php-fpm start
  05. > cd -
  06. > vim /usr/local/httpd-2.4.37/conf/httpd.conf
	#添加以下内容
	AddType application/x-httpd-php .php
	AddType application/x-httpd-php-source .phps
  07. > cp /usr/local/src/php-5.6.9/php.ini-development /usr/local/php-5.6.9/lib/php.ini
  08. > vim /etc/profile
	PATH=$PATH:/usr/local/php-5.6.9/bin		#文件最后添加
  09. > source /etc/profile

安装扩展

yum install -y gcc gcc-c++ make automake 
wget https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz
tar -zxvf cmake-3.15.5.tar.gz
cd cmake-3.15.5
./bootstrap && make -j4 && sudo make install
#安装rabbitmq-c
git clone https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gz
tar xvzf rabbitmq-c-0.8.0.tar.gz
cd /root/rabbitmq-c-0.8.0/
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c ..
cmake --build .  --target install
cd /usr/local/rabbitmq-c
ln -s lib64 lib
#安装amqp
cd -
wget -c https://pecl.php.net/get/amqp-1.6.1.tgz
tar xvzf amqp-1.6.1.tgz
cd amqp-1.6.1
/usr/local/php-5.6.9/bin/phpize 
./configure --with-php-config=/usr/local/php-5.6.9/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c/
make && make install
#编辑php.ini
vim /usr/local/php-5.6.9/lib/php.ini
	#添加扩展
	extension=amqp.so
	
重启php
service httpd restart


错误处理:
1、[root@localhost htdocs]# service httpd restart
	AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
	解决方法
	vim /usr/local/httpd-2.4.37/conf/httpd.conf
		将#ServerName www.example.com:80	改为	ServerName localhost:80

操作RabbitMQ

生产者代码publisher.php

<?php
/**
 * Created by PhpStorm.
 * User: jmsite.cn
 * Date: 2019/1/15
 * Time: 13:15
 */

$config = array(
    'host' => '192.168.75.132',
    'vhost' => '/',
    'port' => 5672,
    'login' => 'test',
    'password' => 'test'
);
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    echo "Cannot connect to the broker";
    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();
//创建10个消息
for ($i=1;$i<=10;$i++){
	//消息内容
    $msg = array(
        'data'  => 'message_'.$i,
        'hello' => 'world',
    );
	//发送消息到交换机,并返回发送结果
	//delivery_mode:2声明消息持久,持久的队列+持久的消息在RabbitMQ重启后才不会丢失
    echo "Send Message:".$ex->publish(json_encode($msg), $routingKey, AMQP_NOPARAM, array('delivery_mode' => 2))."\n";
	//代码执行完毕后进程会自动退出
}

消费者代码 consumer.php

<?php
/**
 * Created by PhpStorm.
 * User: jmsite.cn
 * Date: 2019/1/15
 * Time: 13:16
 */
//声明连接参数
$config = array(
    'host' => '192.168.75.132',
    'vhost' => '/',
    'port' => 5672,
    'login' => 'test',
    'password' => 'test'
);
//连接broker
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    echo "Cannot connect to the broker";
    exit();
}
//在连接内创建一个通道
$ch = new AMQPChannel($cnn);
//创建一个交换机
$ex = new AMQPExchange($ch);
//声明路由键
$routingKey = 'key_1';
//声明交换机名称
$exchangeName = 'exchange_1';
//设置交换机名称
$ex->setName($exchangeName);
//设置交换机类型
//AMQP_EX_TYPE_DIRECT:直连交换机
//AMQP_EX_TYPE_FANOUT:扇形交换机
//AMQP_EX_TYPE_HEADERS:头交换机
//AMQP_EX_TYPE_TOPIC:主题交换机
$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();
//交换机和队列通过$routingKey进行绑定
$q->bind($ex->getName(), $routingKey);
//接收消息并进行处理的回调方法
function receive($envelope, $queue) {
	//休眠两秒,
    sleep(2);
	//echo消息内容
    echo $envelope->getBody()."\n";
	//显式确认,队列收到消费者显式确认后,会删除该消息
    $queue->ack($envelope->getDeliveryTag());
}
//设置消息队列消费者回调方法,并进行阻塞
$q->consume("receive");
//$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐

因为我们执行生产者之前已经关掉了全部消费者,所以此时消息在队列中等待获取;
因为在发送消息时设置了delivery_mode:2来声明消息持久化,此时如果重启RabbitMQ,消息还会恢复;此时重新执行消费者,假设还是两个,打开两个命令行/终端,输入php consumer.php,我们可以看到消息被消费,如下图:

 

参考网址

abbitMQ手册之rabbitmqctl        

https://www.jianshu.com/p/61a90fba1d2a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

無薪法师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值