
昨天我提了一个问题:
我现在想实现一个功能,功能是这样的: 用户在关注微信服务号 5 分钟后 ,在服务号里自动再发送一条客服消息给同一个用户,催促他行动 现在有一个 php 库叫 easywechat,当用户在服务号触发各种行为的时候,很容易去实时自动回复, 但我如果想五分钟后回复,是不是用 php 的 sleep 5min 来暂缓执行发送客服消息的命令吗 但这样如果多个用户同时进来,会不会服务器内存爆掉, 还是说要把用户的 openid 存到数据库里,再做,但是这样太复杂了,作为计算机二级代码水平的我来说,有点困难 我看了大家的留言,无奈计算机二级的我 大部分方案对我来说难度略大, 有一位大佬说:“延迟队列吧 beanstalk 延迟 5 分钟然后处理 可以不用存储到数据库” 我照着实现了,但是依然很多地方不会写(标记为绿色的地方)
所以求一个略懂 Php 的大佬帮忙,感激感激

我用"php artisan make:job SendSecondMessage"命令 建立了一个队列 job 产生了如下代码

1 AZZERO OP 自己顶一下,愿意付费解答也可以,焦头烂额啊.. |
2 AZZERO OP 求个愿意付费解答的大佬 |
3 alex321 2019-04-23 13:31:34 +08:00 另外写一个方法,查询 5 分钟前 6 分钟内关注的粉丝,发送你要推送的消息,通过计划任务使用 cli 每分钟调用一次。 |
4 zhuzhibin 2019-04-23 13:48:33 +08:00 楼上的办法 每分钟执行一次 可能会重复推送 |
5 zyy314680012 2019-04-23 13:49:24 +08:00 via Android 队列 |
6 zhuzhibin   2019-04-23 13:53:04 +08:00 丢 延时任务入队列即可 定义 delay 延迟多久 需要执行什么 传什么参 |
7 AZZERO OP @alex321 大佬能远程控制把我弄下么,目前就实现了自动回复 Text 的逻辑,现在想回复完,5min 后再次回复一句 Text,不知道传哪个参啊 |
9 zhuzhibin 2019-04-23 14:08:03 +08:00 @AZZERO 你要学会 先尝试自己解决问题的... 谷歌一下 https://blog.csdn.net/qq_17403553/article/details/81535780 |
10 wlkq 2019-04-23 14:25:42 +08:00 按我的理解: 队列: use EasyWeChat\Kernel\Messages\Text protected $openid; public function __construct($SecondMessage,$openid) { $this->SecOndMessage= $SecondMessage; $this->openid = $openid; } public function handle() { $message2 = new Text($this->$SecondMessage); $app = app('wechat.official_account'); $app->customer_service->message($message2)->to($this->openid)->send(); } 调用: use App\Jobs\SendSecondMessage $job = new SendSecondMessage('第二条消息','用户的 openid'); $this->dispatch($job->onQueue('队列名字')->delay(Carbon::now()->addMinutes(10))); |
11 masker 2019-04-23 14:26:45 +08:00 via Android 培训出来的这么缺乏动手能力? |
14 echoZero 2019-04-23 15:47:23 +08:00 哈哈 昨天留的这句话 延迟队列吧 beanstalk 延迟 5 分钟然后处理 可以不用存储到数据库 没想到被你采用了, 但是可惜的我没有用过 laravel,只是有点了解。 |
15 agdhole 2019-04-23 16:12:52 +08:00 via Android 写了 job 之后要把 job 发给队列,首先要用 artisan 命令启动队列,然后再触发 job |
16 AZZERO OP |
17 AZZERO OP |
18 wlkq 2019-04-24 09:05:53 +08:00 @AZZERO #16 这是正常状态,说明队列正在运行,走下代码触发一下 job,看看通不通 这是文档: https://learnku.com/docs/laravel/5.8/queues/3923。 可以自己找对应的 laravel 版本 |
19 AZZERO OP @wlkq 大佬 你上面 10 楼的代码我已经跑通了 不过我又来恬不知耻的问你了... 就是实现:用户在关注微信服务号 5 分钟后 ,发送一条客服消息,(<--用你 10 楼的代码完美跑通了),然后再过 5 分钟,再发送一条, 我现在想 第一个队列完了后,再加入一个队列,或者第一次就加入两个队列( 5min 后 和 10min 后) 我看文档用到 任务链 那十楼的代码能如何修改一下么...App\Jobs\SendSecondMessage 我再新建一个 App\Jobs\SendSecondMessage2 ? |