将数据库与消息队列解耦的最佳实践

0 投票
1 回答
697 浏览
提问于 2025-04-17 04:31

我正在开发一个网页应用,让用户可以上传图片。当图片上传后,需要把它调整成一个或多个不同的尺寸,然后把这些尺寸的图片发送到亚马逊的S3存储服务。每个尺寸的图片的相关信息和网址会保存在网页服务器上的一个数据库记录里。我使用消息队列来异步处理调整大小和上传的任务(因为可能会有大图片和每次请求需要调整多个尺寸)。当调整大小和上传的任务完成后,数据库记录需要更新网址。

我遇到的问题是,执行任务的工作程序无法访问数据库。我在想,任务完成后可以从工作程序发一个HTTP回调到网页应用,带上更新数据库记录所需的信息。还有没有其他的解决办法,或者有什么理由让我换个方式做这件事呢?

我使用的是python/pylons作为网页后台,mysql作为数据库,还有celery/amqp来处理消息。

谢谢!

1 个回答

2

看起来你的目标不是把数据库和消息队列(MQ)分开,而是要把它和工作者分开。因此,你可以创建一个新的队列,用来接收完成的通知,然后再设置一个单独的工作者,专门来处理这些通知,并相应地更新数据库。

撰写回答