Политика удаления в 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?

0 ответов

Другие вопросы по тегам