使用tp5的thinkphp queue来实现订单语音通知

编程入门 行业动态 更新时间:2024-10-13 00:31:29

使用tp5的thinkphp queue<a href=https://www.elefans.com/category/jswz/34/1769578.html style=来实现订单语音通知"/>

使用tp5的thinkphp queue来实现订单语音通知

实现场景:用户下单后通知订单,如果在3分钟后还没有接单就语音通知提醒,这里用到的是阿里云的语音通知服务,

在tp5中使用composer来安装

1、安装阿里云语音通知SDK

composer require alibabacloud/dyvmsapi-20170525

       安装think-queue服务 

 composer require topthink/think-queue

2、think-queue的配置文件在application/extra/queue.php,内容是:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016  All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( .0 )
// +----------------------------------------------------------------------
// | Author: yunwuxin <448901948@qq>
// +----------------------------------------------------------------------return ['connector'  => 'Redis',         // Redis 驱动'expire'     => 60,              // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null'default'    => 'default',       // 默认的队列名称'host'       => '127.0.0.1',     // redis 主机ip'port'       => 6379,            // redis 端口'password'   => '',              // redis 密码'select'     => 1,               // 使用哪一个 db,默认为 db0'timeout'    => 0,               // redis连接的超时时间'persistent' => false,           // 是否是长连接
];

        这里需要自己安装redis,百度步骤即可。

3、消息的消费删除,建立一个文件来处理消息的逻辑

<?php
/*** Created by PhpStorm.* User: Admin* Date: 2020/8/28* Time: 14:59*/namespace app\api\job;use AlibabaCloud\Client\AlibabaCloud;
use app\api\model\Remind;
use app\api\model\User;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\ServerException;
use think\queue\Job;class Call
{public function fire(Job $job,$data){//....这里执行具体的任务//$data是订单提醒的id,执行任务的时候查看是否还有remind$remind = (new Remind())->get($data);if ($remind){echo '执行'.$data;//如果存在,查找用户的电话$user = (new User())->get($remind->user_id);
//            echo $user->phone;//将用户的电话传入if ($this->call($user->phone)){//如果任务执行成功后记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法$job->delete();}else{if ($job->attempts() > 3) {//通过这个方法可以检查这个任务已经重试了几次了$job->delete();}}}else{return;}// 也可以重新发布这个任务//$job->release(60); //$delay为延迟时间}public function call($phone){AlibabaCloud::accessKeyClient('#######', '#########')->regionId('cn-hangzhou')->asDefaultClient();try {$result = AlibabaCloud::rpc()->product('Dyvmsapi')// ->scheme('https') // https | http->version('2017-05-25')->action('SingleCallByVoice')->method('POST')->host('dyvmsapi.aliyuncs')->options(['query' => ['RegionId' => "cn-hangzhou",'CalledNumber' => $phone,'VoiceCode' => "#########",'CalledShowNumber' => "",'Volume' => "100",'PlayTimes' => "3",'Speed' => "1",],])->request();print_r($result->toArray());return true;} catch (ClientException $e) {echo $e->getErrorMessage() . PHP_EOL;} catch (ServerException $e) {echo $e->getErrorMessage() . PHP_EOL;}}}

然后在需要创建消息的控制里,写

$isPushed = Queue::later(5,"app\api\job\Call", $data = $remind->id,"call");

     5是延迟时间,$data是传递的数据,call是创建消息的名字。

4、在控制行输入命令来执行:

php think queue:work --queue call    ------     处理一个call的消息,处理完就结束

php think queue:work --daemon --queue call        ----     循环处理,可以一直监听消息

 

5、在linux上部署,并使用supervisor来监听消息的的处理在另一篇文章。

更多推荐

使用tp5的thinkphp queue来实现订单语音通知

本文发布于:2024-02-06 02:04:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745583.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:来实现   语音   订单   通知   thinkphp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!