将数据库与消息队列分离的最佳实践

时间:2011-10-18 04:41:08

标签: python database pylons message-queue celery

我正在构建一个允许用户上传图像的Web应用程序。上传图像时,需要将其大小调整为一个或多个大小,每个大小都需要发送到Amazon s3进行存储。每种大小的图像的元数据和URL都存储在Web服务器上的单个数据库记录中。我正在使用消息队列来异步执行调整大小和上传(因为每个请求可能存在大图像和多个调整大小)。调整大小/上载任务完成后,需要使用url更新数据库记录。

我的问题是执行任务的工作人员无法访问数据库。我在考虑在任务完成后从工作人员回复到Web应用程序的http回调,并提供更新数据库记录的相应信息。是否有其他替代方案或理由我应该采取另一种方式?

我正在使用python / pylons作为web后端,使用mysql作为数据库,使用celery / amqp进行消息传递。

谢谢!

1 个答案:

答案 0 :(得分:2)

您的目标似乎不是将数据库与MQ分离,而是与工作者分离。因此,您可以创建另一个接收完成通知的队列,并让另一个工作人员接收通知并相应地更新数据库。