SQS队列中的确认消息

Boj*_*ski 5 java jms message-queue amazon-sqs amazon-web-services

我正在将Amazon SQS与带有Java EE 7的Amazon SQS-JMS Java库一起使用。我想要实现的是在收到一条消息之后,根据应用程序的业务逻辑,是确认(使用)消息还是再次将其重新发送到队列,然后重试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

对我来说,这是一种奇怪的行为,与我对client_acknowledge的期望相反。除了根据过程状态手动将整个代码中的消息手动发送到主SQS队列或DLQ之外,还有一种更优雅的解决方案吗?

小智 5

您可以使用:

UNORDERED_ACKNOWLEDGE

SQSSession.UNORDERED_ACKNOWLEDGE

来自“com.amazon.sqs.javamessaging;” 正如文档中所述,它是 Client_Acknowledge 的变体,它仅确认调用它的消息。

 /**
 * Non standard acknowledge mode. This is a variation of CLIENT_ACKNOWLEDGE
 * where Clients need to remember to call acknowledge on message. Difference
 * is that calling acknowledge on a message only acknowledge the message
 * being called.
 */
Run Code Online (Sandbox Code Playgroud)

依赖项示例:“com.amazonaws:amazon-sqs-java-messaging-lib:1.0.3”

  • 非常感谢,一个更好的名字会节省很多时间。 (2认同)