我有一个应用程序,它使用JMS发送大约几兆字节的文件。是否可以使用Amazon SQS作为此应用程序的JMS提供程序,如here所述?
这里的问题是SQS消息的最大大小是256K。解决此问题的一种方法是将每个文件分解为多个256K的消息。但是,如果我这样做,多个生产者会同时发送文件打破架构,因为来自不同生产者的消息会混淆不清?
答案 0 :(得分:2)
在这种情况下,您无法将原始邮件与SQS一起使用,您必须使用带有原始邮件引用的新邮件。引用可以是S3对象,也可以是本地或with-in AWS中的自定义位置。 S3选项可能涉及最少的工作量并且具有最佳的成本效率(构建和运行)。
如果您考虑使用S3选项,可以使用AWS Lambdas在SQS中删除邮件。
在旁注中,此处考虑的原始邮件似乎是自包含的。重新审视消息的内容可能是一个好主意,您可能会找到修剪它的方法,并且只发送可能导致较小负载的位置。
答案 1 :(得分:1)
如果所有内容都位于同一区域,则延迟和数据传输成本非常低。将项目放入S3并在SQS中发送对象应该只需将您的解决方案处理为任何大小的数据,并在项目的可扩展性和每个项目的大小上下功夫。
虽然我说数据传输成本很低,但您可能仍会在S3中产生数据存储成本;您可以使用S3生命周期规则删除它们。
@ D.Luffy提到了一个使用lambda的重要且激动人心的解决方案 - 您可以继续在S3中添加项目 - 启用S3通知,将其传递到队列并处理队列项目(将其传输到另一个ec2实例等。 ) - 让解决方案解决并忘记一些东西。
请毫不犹豫地将S3与SQS一起使用