昨天我提了一个问题:
我现在想实现一个功能,功能是这样的:
用户在关注微信服务号 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 1
另外写一个方法,查询 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 ? |