0

У меня есть отдельный издатель и потребитель. Я начинаю издавать и публиковать сообщения. Теперь я начинаю потребитель, и проблема в том, что сообщения переходят из готовой очереди, чтобы разблокировать очередность, отмечая сообщения как повторно отправленные которые я хочу avoid.So то, что я хочу, это должно быть помечено как только если повторно доставлена ​​я отправить извед, а не на потребителя перезагрузки или запускаRabbit mQ сообщения, перемещающиеся из готовой очереди в очередь Unack

Конфигурация:

@Bean 
public org.springframework.amqp.rabbit.connection.Connection mqConnection() { 
    CloudFactory cloudFactory = new CloudFactory(); 
    Cloud cloud = cloudFactory.getCloud(); 
    return cloud.getServiceConnector("mqservicename", ConnectionFactory.class, 
      null).createConnection(); 
} 
@Bean 
public StatefulRetryOperationsInterceptor interceptor() { 
     return RetryInterceptorBuilder.stateful().retryOperations(retryTemplate()).recoverer(new RejectAndDontRequeueRecoverer()) 

      .build(); 
} 
@Bean 
public SimpleMessageListenerContainer listenerContainer() { 
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
    container.setMessageListener(new MessageListenerAdapter()); 
    container.setAdviceChain(new Advice[] { 
      interceptor() 
    }); 

    return container; 
} 



@Bean 
public RetryTemplate retryTemplate(){ 
    Map map=new HashMap<Class<? extends Throwable>, Boolean>(); 
    map.put(CustomException.class, true); 
    RetryTemplate retryTemplate=new RetryTemplate(); 
    retryTemplate.setRetryPolicy(new SimpleRetryPolicy(3,map)); 
    return retryTemplate; 
} 
+0

Вы уверены, что принимаете сообщения? – cantSleepNow

+0

Да, я был.Теперь с комментарием Гэриса я его отключил и попробовал с настройкой выше. Но он дает только 1 попытку, а не 3 – user

ответ

0

Если вы используете Spring AMQP, ты необходимо указать свою конфигурацию, задавая такие вопросы.

Если вы установили режим ack в MANUAL, вы несете ответственность за файлы. Прочитано the documentation. Для AUTO ackmode контейнер будет выдавать сообщение, когда слушатель возвращается нормально.

+0

. Я мог бы решить это, изменив логику повторной доставки, поданную в суд в коде. Но проблема теперь в том, что Небольшой объем данных, которые я мог бы правильно протестировать, но с большим объемом данных, я получаю ниже исключения: – user

+0

org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Отключение канала: ошибка канала; Метод протокола: #method (reply-code = 406, reply-text = PRECONDITION_FAILED - неизвестный тег доставки 123, class-id = 60, method-id = 80) – user

+0

Чтобы добавить данные, я даю 3 шанса к сообщению на основе флага redeliver. Для каждого сбоя (некоторая логика, которая выполняет некоторую проверку сообщения) я использую basicNack и требую true. При последнем сбое я использую basicknack и requeue для false. Для успеха я использую basicAck и requeue к ложному. – user

Смежные вопросы