由于目前维护的系统是thinkphp3.2版本的代码,升级无望,当时还没用composer包的自动更新。在现有架构基础上需要投递rabbitMq消息
1.首先在项目的根目录下创建一个vendor目录,将来这个目录会和代码一起提交,因为不是composer自动更新的
![](http://www.leanin.top/wp-content/uploads/2024/04/image.png)
2.在php官方扩展包网站找到包对应的版本
https://packagist.org/packages/php-amqplib/php-amqplib
包的每个版本上都会有需要的php版本环境的说明,选择是和自己的
因为是老项目,我的php版本还是5.6的,我选择了包的版本是2.12.1
![](http://www.leanin.top/wp-content/uploads/2024/04/image-1.png)
3.新建一个空白的目录,进入目录执行(首先你安装了composer)
composer require php-amqplib/php-amqplib 2.12.1
在空白目录里面会自动生成,将生成的vendor目录直接覆盖老项目中的vendor目录。
4.在thinkphp3.2的入口文件中开头加上如下一句话
![](http://www.leanin.top/wp-content/uploads/2024/04/image-2.png)
require './vendor/autoload.php';
这样在代码中就可以直接使用命名空间引用包里面的类文件了
5.实际应用投递rabbitMq如下
<?php
namespace Home\Controller;
use Think\Controller;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
class ServerRestartController extends Controller
{
public function produce()
{
try{
$exchange = 'exchange';
$routingKey = 'routing_key';
//测试数据
$data = [
"test" =>123
];
$config = C('AMQP');
$connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['password'], $config['vhost']);
$channel = $connection->channel();
$channel->exchange_declare($exchange, 'topic', false, true, false);
$messageBody = json_encode($data) ;
$message = new AMQPMessage($messageBody, array('content_type' => 'application/json', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT));
$channel->basic_publish($message, $exchange,$routingKey);
$channel->close();
$connection->close();
}catch (Exception $e){
var_dump('serverRestartProduce遇到了异常:'.$e->getMessage());
}
return true;
}
}