У меня есть два приложения, которые генерируют сообщения друг на друга, используя Spring Cloud stream и rabbitmq binder.Я не могу подписаться на канал глобальной или выделенной ошибки.Я уверен, что пропускаю одну из молитв аннотации к одному из богов рамок Весны.
Я попытался упростить код до следующего.(Код также доступен на https://github.com/achintmehta/springclouddemo)
. В следующем коде я пытаюсь отправить сообщение на канал INPUT и возвращаю сообщение на канале OUTPUT. Приемник потока для канала INPUT выдает исключение, и я вижуlogHandler печатает исключение, но ни одна из моих зарегистрированных конечных точек для ошибок не вызывается.
public static void main(String[] args) {
SpringApplication.run(SprintclouddemoApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
// Send a message to INPUT Channel
System.out.println("****************** Inside run method *********************");
source.input().send(
MessageBuilder
.withPayload("ACTIVE")
.build());
}
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT) // Send back the response to OUTPUT channel
public String requestReceived(
String state) {
// Receive message on input channel
System.out.println("****************** Received event *********************");
// Throw exception
throw new RuntimeException("!!!!! ABORT ABORT !!!!!");
//return "Event received";
}
@StreamListener(Processor.OUTPUT)
public void responseReceived(Message<?> message) {
// Listen for message on OUTPUT channel
System.out.println("******************* ACK received as : " + message);
}
@ServiceActivator(inputChannel="errorChannel")
public ErrorMessage onError(ErrorMessage message) {
// THIS FUNCTION NEVER GETS CALLED WHEN EXCEPTION HAPPENS
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Received ERROR: " + message);
return message;
}
@StreamListener("errorChannel")
public void error(Message<?> message) {
// THIS FUNCTION NEVER GETS CALLED WHEN EXCEPTION HAPPENS
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Handling ERROR: " + message);
}
Ниже приведен мой файл application.yml
spring:
application:
name: cloudstream-demo
rabbitmq:
host: rabbitmq
port: 5672
username: guest
password: guest
cloud:
stream:
bindings:
input:
destination: stateChangeTopic
content-type: application/json
group: stateChangeGroup
output:
destination: stateChangeRspTopic
content-type: application/json
group: stateChangeRspGroup
Выходные журналы также находятся в github на следующемссылка: https://github.com/achintmehta/springclouddemo/blob/master/logs.txt