问题陈述
非正式国家
我们有一些场景,其中集成层( AWS、SNS/SQS组件等的组合)。还负责向目标系统分发数据。这些主要是异步流。在这种情况下,我们向调用方发送确认,确认我们已经收到数据,并将负责数据传递。在这里,虽然数据不是来自集成层,我们仍然持有它,并需要确保数据不会丢失,例如,如果使用者停机,或者消息被错误地发送到DLQ,因此在保留期之后自动删除。
解决方案设计
目前,我的想法是根据CloudWatch配置的警报对SQS/DLQ队列进行备份,使用具有某些应用阈值的ApproximateAgeOfOldestMessage度量(如下所示):
如果
/消息保留>阈值,则ApproximateAgeOfOldestMessage Msg终止事件
现在,我更多地提出了这个想法,我更怀疑这是否真的是正确的…方法。
特别是,我希望构建一些可以“附加”到我们的SQS队列的不引人注目的东西,并转储某些存储库中即将过期的消息,比如AWS S3。然后有一个过程将消息从S3恢复到相同的原始队列。
上面的过程包含许多挑战,例如:消息标识和使用(接收消息不是设计为“查询”特定消息)、存储库中的消息转储(引用源队列)等等,这表明上述方法可能是一个复杂的过头处理方法。
尽管如此,我知道还有其他“替代方案”(如this),但是如果您能够回答上面描述的具体技术细节,,而不是试图挑战“需求”。,我将不胜感激。
发布于 2019-09-27 00:06:07
类似于Mark的建议,您可以使用suggestion (https://github.com/awslabs/amazon-sqs-java-extended-client-lib)通过S3 (配置旋钮:https://github.com/awslabs/amazon-sqs-java-extended-client-lib/blob/master/src/main/java/com/amazon/sqs/javamessaging/ExtendedClientConfiguration.java#L189)发送所有消息。
扩展客户端是AmazonSQS接口的替代器,因此它最大限度地减少了对业务逻辑的入侵--通常只是更改依赖项注入。
https://stackoverflow.com/questions/57978083
复制相似问题