AUTO_ACKNOWLEDGE и CLIENT_ACKNOWLEDGE в JMS
В настоящее время я использую asticMQ для своей локальной среды, чтобы смоделировать SQS. Я заметил одну вещь при создании производителя и потребителя для SQS, что при создании Session нам нужно определить тип подтверждения.
sqsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
В моем проекте для продюсера при создании сессии я определил его как AUTO_ACKNOWLEDGE
,
Но когда я определяю тот же тип в потребителе, он не может извлечь данные из очереди, а также сообщает об ошибке:
Exception in thread "main" java.lang.NoSuchMethodError: com.amazonaws.services.sqs.AmazonSQS.deleteMessage(Lcom/amazonaws/services/sqs/model/DeleteMessageRequest;)V
at com.amazon.sqs.javamessaging.AmazonSQSMessagingClientWrapper.deleteMessage(AmazonSQSMessagingClientWrapper.java:127)
at com.amazon.sqs.javamessaging.acknowledge.AutoAcknowledger.acknowledge(AutoAcknowledger.java:33)
at com.amazon.sqs.javamessaging.acknowledge.AutoAcknowledger.notifyMessageReceived(AutoAcknowledger.java:42)
at com.amazon.sqs.javamessaging.SQSMessageConsumerPrefetch.messageHandler(SQSMessageConsumerPrefetch.java:477)
at com.amazon.sqs.javamessaging.SQSMessageConsumerPrefetch.receive(SQSMessageConsumerPrefetch.java:410)
at com.amazon.sqs.javamessaging.SQSMessageConsumer.receive(SQSMessageConsumer.java:157)
at com.abc..message.SettlementReleaseConsumer.receiveMessage(Consumer.java:45)
at com.abc.message.Consumer.main(Consumer.java:32)
Кто-нибудь может объяснить, что здесь происходит?
Еще одна вещь, когда я изменил свой поток создания сеанса в Consumer с AUTO на CLIENT и позже вызвал message.acknowledge(). Работает отлично.