SQSListner中的删除政策

时间:2018-07-16 09:00:03

标签: amazon-web-services jms amazon-sqs spring-jms aws-cloud-config

我最近开始为我的一个项目使用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 个答案:

没有答案