我正在使用Java EE 7和Amazon SQS-JMS Java库与Amazon SQS。我的目标是在收到消息后,根据应用程序的业务逻辑确认(消耗)消息或将其重新发送到队列,并在3次失败重试后将其移动到DLQ。
我考虑使用JMS中的CLIENT_Acknowledge模式,并仅确认成功处理的消息,但这是他们官方文档中的说明:
“在此模式下,当确认消息时,所有在此消息之前接收到的消息都会被隐式确认。例如,如果接收了10条消息,并且仅确认第10条消息(按照接收消息的顺序),则前面的9条消息也会被确认。”
该示例似乎也证实了这一点:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/code-examples.html#example-synchronous-receiver-client-acknowledge-mode。
对我来说,这种行为有点奇怪,并且与我对客户端确认的期望相反。这里是否有比手动将消息发送到主SQS队列或DLQ更优雅的解决方案,具体取决于处理状态?
我考虑使用JMS中的CLIENT_Acknowledge模式,并仅确认成功处理的消息,但这是他们官方文档中的说明:
“在此模式下,当确认消息时,所有在此消息之前接收到的消息都会被隐式确认。例如,如果接收了10条消息,并且仅确认第10条消息(按照接收消息的顺序),则前面的9条消息也会被确认。”
该示例似乎也证实了这一点:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/code-examples.html#example-synchronous-receiver-client-acknowledge-mode。
对我来说,这种行为有点奇怪,并且与我对客户端确认的期望相反。这里是否有比手动将消息发送到主SQS队列或DLQ更优雅的解决方案,具体取决于处理状态?