已发布的SQS消息的大小有限制.单条消息不能大于256 KB,一批消息(最多10条)也不能超过256 KB.将消息添加到集合以便稍后发布到SQS队列时,如何跟踪消息大小以确保我的请求保持在限制之下?
我已经研究了获取对象大小的方法,并且我知道在调用之后我可以使用失败消息的ID sendMessageBatch().我不认为这些都是非常好的解决方案,因为对象本身的大小省略了消息的开销数据(我认为也很重要),我真的不想仅仅因为管理失败的消息批次太大了.我真的不希望我的消息那么大,但你永远不知道.
要批量处理和发送的代码段:
List<SendMessageBatchRequestEntry> entries = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)
然后循环:
SendMessageBatchRequestEntry entry = new SendMessageBatchRequestEntry();
entry.setMessageBody(gson.toJson(message));
entry.setMessageAttributes(attributes);
entry.setId(messageId);
// How to make sure `entry` is not larger than 256 KB, and how to
// make sure adding this entry won't cause the batch to exeed 256 KB?
entries.add(entry);
Run Code Online (Sandbox Code Playgroud)
最后:
client.sendMessageBatch(queueUrl, entries);
Run Code Online (Sandbox Code Playgroud)