我想上传图片到S3服务器,但是在上传之前,我想生成3种不同尺寸的缩略图,我想在请求/响应周期之外完成,因此我使用芹菜。我读过这些文件,这是我理解的。如果我错了,请纠正我。
芹菜帮助您管理请求响应周期之外的任务队列。
然后有一个叫做carrot/kombu的东西——它是一个Django中间件,用于打包通过芹菜创建的任务。
第三层是pyamqp,它促进了carrot与经纪人之间的通信。例如rabbitmq、amazonqs、ironmq等。
经纪人坐在不同的服务器上,为你做些事情。
现在我的理解是-如果多个用户同时上传图像,芹菜将排队调整大小,而且调整大小实际上会发生在IronMQ服务器上,因为它提供了一个很酷的加载项Heroku。
现在的疑问是:
但是,在调整图像大小之后,IronMQ会将其推送到S3服务器,或者在进程完成后通知它。我不清楚。
芹菜和红萝卜有什么区别,你能解释清楚吗?

最佳答案

IronMQ不为您处理任务;它只是作为芹菜的后端,跟踪需要执行的作业。
所以,这就是发生的事情。假设您有两个服务器,Web服务器和芹菜服务器。Web服务器负责处理请求,芹菜服务器创建缩略图并将其上载到S3。下面是一个典型的请求:
您的用户将图像上载到Web服务器。
您可以将该图像存储在某个地方——我建议您亲自将其放在S3上,但也可以将其存储在base64编码的中,例如IronCache。重点是把它放在你的芹菜服务器可以访问的地方。
您在芹菜上排队工作,将图像的位置传递给芹菜服务器。
你的芹菜服务器下载图片,生成你的缩略图,然后上传到S3。然后,它将S3 URL存储在作业结果中。
Web服务器等待作业完成,然后可以访问结果。或者,您可以让芹菜服务器将结果存储在数据库中。重点是芹菜服务器执行繁重的提升(生成缩略图),并且在执行请求循环时不保持该状态。
我写了一个在Heroku上使用IronMQ的示例。您可以在这里看到它:http://iron-celery-demo.herokuapp.com。您可以看到示例on Githubread the tutorial的源代码,该示例详细说明了如何在Heroku上部署芹菜。
要清除AMQP的内容:
IronMQ是Iron.io开发的基于云的消息队列服务。
AMQP是一个开放的消息传递规范
rabbitmq是amqp规范中最流行的实现(我知道)。
pyamqp是一个python库,它允许python客户机与amqp的任何实现进行通信,包括rabbitmq
IronMQ和RabbitMQ/AMQP最大的区别之一是IronMQ是托管和管理的,因此您不必自己托管服务器,也不必担心正常运行时间。规范提供了更多的差异化方面的内容,并且有一些潜在的差异,但是芹菜将这些内容抽象了出来。因为您使用的是芹菜,所以您可能注意到的唯一区别是IronMQ是托管的,所以您不必站起来管理自己的服务器。
全面披露:我受雇于Iron.io,IronMQ背后的公司。

08-16 10:37