SQSListener + Dead Letter Queue + SqsMessageDeletionPolicy - PullRequest
0 голосов
/ 07 октября 2018

У меня один вопрос: мой сервис основан на 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());
        }
    }

У меня есть очередь A AWS SQS A и очередь недоставленных писем B. При возникновении проблемы с синтаксическим анализом JSON для объекта это сообщение следует сохранить в мертвом состоянии.очередь писем.Это работает сейчас, как и ожидалось.То, что я должен иметь, это когда, например, Redis мертв -> строка

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

выдает ошибку, которую я хотел бы НЕ УДАЛИТЬ мое сообщение из очереди A и перейти в очередь недоставленных писем B, НО я быхотел бы, чтобы мое сообщение оставалось в очереди A, пока Redis не будет работать снова.

КАК это сделать?Как провести различие между этими двумя случаями (ошибки синтаксического анализа и проблемы с повторным отображением) и использовать другой подход (переместить сообщение в очередь недоставленных сообщений, восстановить сообщение и снова сделать его видимым)?

СПАСИБО ЗА ПРЕДЕЛАМ Mateusz

...