SQSListener +死信队列+ SqsMessageDeletionPolicy

时间:2018-10-07 12:54:35

标签: spring-boot message-queue amazon-sqs

我有一个问题:我的服务基于Spring Boot,我想从AWS SQS获取消息并将这些消息保存在Redis上。

这是我的听众:

@SqsListener(value = "${amazon.sqs.destination}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
    public void receive(String requestJSON, Acknowledgment acknowledgment) throws IOException, AmazonSQSException {
        try (Jedis jedis = jedisPool.getResource()) {
            if (redisPassword != null && !redisPassword.isEmpty()) {
                jedis.auth(redisPassword);
            }
            long key = jedis.incr("Trace:");
            Trace trace = Trace.fromJSON(requestJSON);
            trace.setTechnicalId(Long.toString(key));
            traceRepository.save(trace);
            acknowledgment.acknowledge();
        }catch (Exception e) {
            throw new IOException(e.getMessage());
        }
    }

我有AWS SQS队列A和死信队列B。 如果将JSON解析为对象时出现问题,则此消息应保存在死信队列中。现在可以正常工作了。 我应该拥有的是例如Redis死了->行

try (Jedis jedis = jedisPool.getResource()) { 

引发错误 我不想将我的消息从队列A中删除,而移到死信队列B中,但是我希望我的消息仍在队列A中,直到Redis再次工作。

该怎么做?

如何区分这两种情况(解析错误和redis问题)并处理不同的方法(将消息移至死信队列并还原该消息并使它再次可见)?

在此先感谢您 马特乌斯

0 个答案:

没有答案