业务场景:
公司是主php做开发的,框架为thinkphp。众所周知,php本身的运行效率存在一定的缺陷,所以如果有一个很复杂很耗时的业务时,必须开发一个常驻内存的程序。首先我想到了php的workerman与swoole,但是这里应上面的标题哈,想将耗时任务交给另一个服务器,同时列队处理。所以这里我想独立部署一个rabbitMQ服务器用于处理列队任务(关于liunx如何搭建rabbitMQ服务,去我主页有详细教程)。
当rabbitMQ服务器我们准备好了,建立了一个持久化命名为ceshi的列队,如下:
项目上生产者和消费者的开发我这里全部采用tinkphp6+workerman,为便于管理。这里这么做也是因为发现workerman中对rabbitMQ的文档解释太少了!所以开始踩坑!
1、首先部署好thinkphp6框架。(过程去看thinkphp6手册)
2、安装workerman扩展。(过程去看thinkphp6手册)
3、生产者
配置一个workerman类
创建的Send类代码如下:
<?php
namespace appworkerman;
use BunnyChannel;
use WorkermanRabbitMQClient;
use thinkworkerServer;
class Send extends Server
{
//websocket地址,一会用于测试。
protected $socket = 'websocket://127.0.0.1:2345';
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage($connection, $data)
{
//websocket发送过来的消息
$connection->send('我收到你的信息了:'.$data);
//rabbitMQ配置
$options = [
'host'=>'127.0.0.1',//rabbitMQ IP
'port'=>5672,//rabbitMQ 通讯端口
'user'=>'admin',//rabbitMQ 账号
'password'=>'123456'//rabbitMQ 密码
];
(new Client($options))->connect()->then(function (Client $client) {
return $client->channel();
})->