0

我试图完成的是构建最简单的系统来处理通过消息队列进行图像上传。通过消息队列传输图像(或大文件)

现在我们正在处理临时文件,我们为每个需要通过Aws S3发送的图像创建一个,并根据我们的需要对其进行优化/定制。一旦完成所有这些,我们就把它推到S3。

现在,这个工作正常,但我想通过使用图像的base64编码来删除文件系统开销,使得该进程完全与应用程序运行的系统分离。

由于我们打算使用Amazon SQS(我们目前在生产中使用Beanstalkd),它们的服务不允许将超过256Kb的有效载荷推送到队列中,并且这是一个问题,因为图像相当繁重。

还有哪些解决方案可供探索?

+0

发送中间文件到S3并在SQS消息中引用它的临时位置url,也许? –

+0

这是一个想法,如果只有PHP SDK支持它......我见过AWS开发了一个扩展客户端,但仅限于Java。哎呀。 – GiamPy

+0

SDK不会自动为SQS提供支持,但没有任何明显的理由说明,为什么您不能自己将文件存储在S3中,并将URI包含在SQS消息中。 –

回答

1

在这种情况下,您可以查看将文件分解为合适的消息大小(256Kb),使用适当的序列号标记消息并放入队列。另一方面,接收消息按顺序重新组装消息,并写入文件或将图像数据推送到解决方案的其他阶段。

+0

SQS只接受有效的UTF-8作为有效载荷,而不是二进制数据,因此内容必须以base64编码进行传输。潜在的不按顺序交付也使这有点脆弱。 –

+0

好的。谢谢。但是没有一种方法/配置选项来确保递送顺序? – Shashi

+1

编号AWS SQS不确保您发送作业的顺序与您要接收时的顺序相同。您需要在应用程序级别处理它。 – GiamPy