весенний облачный поток — StreamBridge — сообщения не отправляются в DLQ, когда никто не получает сообщение в удаленном пункте назначения

#java #spring #spring-boot #spring-cloud #spring-cloud-stream

Вопрос:

У меня есть микросервис, который будет отправлять сообщения в неизвестном направлении.

когда «пункт назначения» не существует, сообщения не попадают в DLQ, но когда я создаю исключение, используя приведенный ниже код, они отправляются

 return Flux.error(new RuntimeException("checkException"));
 

но в моем случае, если никто не использует сообщение в этом месте назначения, поэтому сообщение должно отправляться в DLQ

     @Bean
    public Function<Flux<String>,Flux<?>> processor() {
        return messageFlux -> messageFlux.flatMap(
                checkMessageString -> {
                    log.info("Received message from payment-processor ");

                    Map<String, String> checkMessage = new HashMap<>();
                    /* extracting payload from input */
                    try {
                        checkMessage = jsonMapper.readValue(checkMessageString, Map.class);
                    } catch (JsonProcessingException e) {
                        e.printStackTrace();
                    }
                    checkMessage.put("status","Success");

                    /* returning new PaymentResponse */
                    log.info("Sending message to destination ");
                    streamBridge.send("destination",checkMessage);
//                    return Flux.error(new RuntimeException("checkException"));
                    return Mono.just(checkMessage);
                });
    }
 

приложение.файл yaml

 spring:
  application:
    name: check-payment
  profiles:
    active: dev
  cloud:
    function:
      definition: processor
    stream:
      function:
        bindings:
          processor-in-0: check-payment
          processor-out-0: destination
      bindings:
        check-payment:
          group: payment
      default-binder: rabbit
      #Defining DLQ - Dead Letter Queue
      rabbit:
        bindings:
          check-payment:
            consumer:
              autoBindDlq: true
              republishToDlq : true
              requeueRejected : false
              maxAttempts : 3
            producer:
              autoBindDlq: true
              republishToDlq : true
              requeueRejected : false
              maxAttempts : 3
          processor-out-0:
            consumer:
              autoBindDlq: true
              republishToDlq : true
              requeueRejected : false
              maxAttempts : 3
            producer:
              autoBindDlq: true
              republishToDlq : true
              requeueRejected : false
              maxAttempts : 3
 

Комментарии:

1. Я не уверен, что понимаю. Отправляющее приложение не может узнать, есть ли потребители, которые будут получать сообщения