Политика удаления в SQSListner
Я недавно начал использовать SQS для одного из моих проектов. Я использую @SQSListner для того, чтобы потребитель прослушал сообщение и обработал его.
public class SQSListener {
private static Object lock = new Object();
String queueName = "my_queue"
@SqsListener(value = queueName, deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
@JmsListener(destination = queueName)
public void handle(String message) throws Exception {
synchronized (lock) {
log.info("received message {} from queue '{}'", message, queueName);
try {
JSONObject jsonObject = new JSONObject(message);
String val = jsonObject.getString("key");
if(val != null) {
//Hit external service
} else {
throw new IllegalArgumentException("Invalid data");
}
} catch (JSONException e) {
log.error("Error occurred while getting merchantId :" ,e);
} catch (Throwable t) {
log.error ("catch....")
}
}
}
}
Политика удаления - ON_SUCCESS в моем случае. Документация гласит:
/**
* Deletes message when successfully executed by the listener method. If an exception is thrown by the
* listener method, the message will not be deleted.
*/
ON_SUCCESS
Мои сомнения:
Я много искал, но неясно, что он будет делать с сообщением, когда есть исключение. Я могу предположить, что я получаю JSONException. что будет в этом случае. Удаляет ли это сообщение из очереди. В моем случае я не могу найти сообщение снова (тогда, что означает, что если метод слушателя выдает исключение, сообщение не будет удалено).
Решение: я решил это. Проблема здесь была, я поймал ошибку. Вместо этого это работало, когда я выдал ошибку.
Дальнейший запрос Является ли в очереди свойство Spring или AWS-SQS?