我需要部分应用程序从我的核心应用程序的工作流程中异步调用Reddit。我已经使用我构建的here的Reddit API库实现了一个半可行的解决方案。对于那些不知道的人,Reddit manages authentication via OAuth并为特定用户返回一个持有者和一个令牌,该用户将在生成后的60分钟内到期。
我选择使用Cookie来存储上述时间段内的授权信息,如requestRedditToken()
method here中所示。如果在需要向Reddit发出另一个请求时未找到cookie(即它已过期),则会生成另一个reddit令牌。 这似乎可以正常工作。
我遇到的问题是概念化与守护队列工作程序集成时如何处理cookie,此外,我需要了解为什么这些调用会定期失败。
如上所述,我正在使用的应用程序会调用Reddit。这些调用由正在处理的作业类创建:UpdateRedditLiveThreadJob
,您可以see here。
这些作业由守护Artisan队列工作人员使用Laravel Forge you can see the details of the worker here处理。在这种情况下,队列驱动程序是Redis,工作人员由Supervisor监控。
UpdateRedditLiveThreadJob
并将其投入队列进行处理。handle()
方法。为什么这个流程在第一个小时起作用,然后如上所述崩溃,假设cookie已经过期了?
我已尽力了解Laravel Queues的工作原理,但我基本上很难概念化不同类型的队列管理选项:queue:listen
,{{1} },在Supervisor上运行的守护进程queue:work
等。我当前的队列基础结构是否与使用cookie管理令牌兼容?
我需要对代码库进行哪些调整才能使应用按预期运行?
我的工作流程如何处理多个用户,每个用户可能有多个Cookie?
如果我重新启动队列工作程序,为什么工作流会神奇地重新开始工作?
如果我在这里错误地描述任何内容或需要澄清,请告诉我。我已尽力简洁地解释问题。
答案 0 :(得分:1)
你的逻辑错误。队列作业实际上是一个运行php脚本的cli。它没有与浏览器的交互。 Cookie在浏览器中设置,请参阅this related thread以供参考。
看到你与API进行交互,将令牌设置为Job中的一个简单变量(或者更好地在该包装器中)然后在该作业中重复使用它会更有意义。
TL:DR:你的包装器不是API客户端。
我知道这不是你所有问题的完整答案,但它是朝着正确方向发展的。因为我能回答你所有的问题 - 最终 - 可能没有给你的问题任何解决方案;)