我正在编写PHP中的几个应用程序之间的集成。一个应用程序将webhook样式的HTTP帖子输出到我的Web服务器上的.php文件中,然后处理该数据并将其发送到其他系统。
据推测,每个POST都将异步执行,这会带来一些问题:
有没有一种简单的方法来“排队”HTTP请求?(我真的不能拒绝POST,如果我这样做,我就不会再次获得它了。)
我已经考虑接受请求并将其保存到数据库(更快的任务)然后让CRON任务迭代数据库中的记录。这会起作用,但看起来很混乱。
答案 0 :(得分:0)
如果您正在从事低预算项目,那么最充分的方式就是IMO的cron工作。
将有效负载发送到服务器的当前应用程序可以改为向数据库添加请求条目。然后,接收请求的服务器可以简单地每天运行一次cron作业X次,迭代数据库条目并按请求执行条目。
这样做的不利之处在于,您的请求不会在执行操作时启动。执行操作需要时间(取决于您的cron-job运行的频率)。
如果你没有在低预算项目上工作,我认为现在是升级的时候了。
这里最简单的解决方案是在需要执行时执行有效负载,这意味着您可以在需要执行进程时随时发送请求。如果您的服务器每X小时/分钟限制为一次请求数量并成为限制,则升级。
答案 1 :(得分:0)
消息队列正是您所需要的。您获取请求数据并将其发送到消息队列。 Web进程此时结束并释放资源,关闭连接等。消息可以由消费者池处理。您可以根据需要随身携带它们。如果您以后需要升级Web服务器或服务器基础架构,则无需升级(这意味着您不需要处理时间紧迫的事情)。
我建议使用enqueue库。您可以从简单的队列传输(如enqueue/fs
或enqueue / dbal`)进行策略,并在以后的阶段迁移到RabbitMQ或AmazonSQS,而不会有太多痛苦。