#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. Я не уверен, что понимаю. Отправляющее приложение не может узнать, есть ли потребители, которые будут получать сообщения