thinkphp3.2投递amqp消息

由于目前维护的系统是thinkphp3.2版本的代码,升级无望,当时还没用composer包的自动更新。在现有架构基础上需要投递rabbitMq消息

1.首先在项目的根目录下创建一个vendor目录,将来这个目录会和代码一起提交,因为不是composer自动更新的


2.在php官方扩展包网站找到包对应的版本
https://packagist.org/packages/php-amqplib/php-amqplib
包的每个版本上都会有需要的php版本环境的说明,选择是和自己的
因为是老项目,我的php版本还是5.6的,我选择了包的版本是2.12.1


3.新建一个空白的目录,进入目录执行(首先你安装了composer)

composer require php-amqplib/php-amqplib 2.12.1

在空白目录里面会自动生成,将生成的vendor目录直接覆盖老项目中的vendor目录。

4.在thinkphp3.2的入口文件中开头加上如下一句话

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;
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部