如何处理超时api请求

话说,我接了百度的千川4.0,因为需求不是对话型的,所以用不了流式,只能等着千川给我返回,但是这个千川的返回时间长达(60s+),经常超时,问了百度的技术,对方让我改成3.5的接口,或者增加超时等待时间

我用了队列,php 和 nginx 都设置了150秒的超时

但是,还是会偶尔提示:
App\Jobs\BaiDuQianChuanJob has been attempted too many times or run too long. The job may have previously timed out

有没有什么别的更好的方法?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 26

如果用guzzle的话需要用 options 里面的 timeout 来设置超时时间

2周前 评论
wongvio (楼主) 2周前

不能回调处理吗?

2周前 评论
wongvio (楼主) 2周前
Smilephp (作者) 2周前
wongvio (楼主) 2周前
Smilephp (作者) 2周前
因为需求不是对话型的,所以用不了流式,只能等着千川给我返回

所以需求的场景是什么?

感觉貌似只能延长超时时间?

2周前 评论
wongvio (楼主) 2周前

file 暂时只能想到加大超时时间

2周前 评论

Laravel 队列,Linux 下,监听超时的 sign 信号和 curl 是同一个,也就是两者超时时间要设置成一样

2周前 评论

需求不是对话型的,不代表你不能使用流式。你完全可以建立一个链接,在这个链接只使用一次,等对方全发过来后,你就终止就是了

2周前 评论
wongvio (楼主) 2周前

这也太慢了,生成几千字的文章也不至于

2周前 评论
_jue

这一不小心网站不被卡死了

2周前 评论
cxxxx

是否可以采用异步的方式进行呢,比如先返回一个默认结果给前端,之后的话将请求存入redis队列 再通过多进程方式去消费请求百度API接口,超时则进行尝试,成功之后将结果通知给用户。

2周前 评论
wongvio (楼主) 2周前

这种情况只能用流式了,http下你设置多少都会有超时的情况,他们这个模型不是很稳定,哪怕你设置的150s也会超时的情况。只能用sse去接收,可以接收时不断覆盖结果,然后加个状态字段提示下生成中,有多少结果就展示多少结果,或者直接等流式结束完全覆盖结果

2周前 评论
yalng (作者) 2周前
wongvio (楼主) 1周前

流式接收千川的响应,接收完了更新你的答案就可以了,不会超时的

1周前 评论

laravel队列可以把超时设置大一点,要不就自己写个简单的队列处理, ···php while(true){ // todo redis()->lpop() ...... } ···

1周前 评论

单独用swoole或者workman、甚至是go之类的,写一个单独脚本来进行接收处理就好。脚本通过比如队列唤醒,或者redis发布订阅、kafka之类的。然后脚本来发起请求

1周前 评论
seebyyu 4天前
wdnmd (作者) 4天前

自己写一个回调接口,在队列收到响应的适合自己请求这个接口

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!