Я настраиваю маршрутизатор значений заголовка с выходом канала по умолчанию, но, похоже, следующий код написан неправильно.
@Autowired
@Qualifier("defaultRouterChannel")
MessageChannel defaultRouterChannel; //PubSub channel
@Bean
public IntegrationFlow amqpFlow() {
return IntegrationFlows
.from("rabbitMqChannel")
.transform(Transformers.fromJson(Agreement.class))
.route(router())
.get();
}
public HeaderValueRouter router() {
HeaderValueRouter router = new HeaderValueRouter(AGREEMENT_HEADER);
router.setDefaultOutputChannel(defaultRouteChannel);
router.setChannelMapping("ENROLL", "enrollChannel");
router.setChannelMapping("ENLIST", "enlistChannel");
return router;
}
@Bean
public IntegrationFlow defaultRoute() {
return IntegrationFlows
.from(defaultRouterChannel)
.log()
.get();
}
В документации упоминается следующее: «Установите канал по умолчанию, куда должны отправляться сообщения, если при разрешении канала не удается вернуть какие-либо каналы. Если канал по умолчанию не предоставлен, а при разрешении канала не удается вернуть какие-либо каналы, маршрутизаторвызовет MessageDeliveryException. "
Проблема в том, что когда отправляется действительный" заголовок соглашения "" пока все хорошо ", но когда я проверяю маршрутизатор с" неверным заголовком ", он выдает" MessageDeliveryException"
следующим образом.
Предположим, что я отправляю заголовок со значением "LOCAL"
Причина: org.springframework.messaging.MessagingException: не удалось разрешить имя канала 'LOCAL';вложенным исключением является org.springframework.messaging.core.DestinationResolutionException: не удалось найти MessageChannel с именем 'LOCAL' в BeanFactory .;Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет объекта с именем 'LOCAL', доступного в org.springframework.integration.router.AbstractMappingMessageRouter.resolveChannelForName (AbstractMappingMessage.oug.rage.rara.rag.terge.rater.r).addChannelFromString (AbstractMappingMessageRouter.java:258) при org.springframework.integration.router.AbstractMappingMessageRouter.addToCollection (AbstractMappingMessageRouter.java:282) при org.springframework.integration.router.AbstractMappingMessageRouter.determineTargetChannels (AbstractMappingMessageRouter.java:186) при org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal (AbstractMessageRouter.java:171) в org.springframework.integration.handler.AbstractMessageHandler.handleMessage (АбстрактMessageHandler.java:158): 116) в org.springfСценарийJava: 73) в org.springframework.integration.channel..GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:181) по адресу org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:160) по адресу org.springframeessice.org.springframework.messaging.core.AbstractMessageSendingTemplate.send (AbstractMessageSendingTemplate.java:108) в org.springframework.integration.handler.AbstractMessageProroductionHandler.sendOutput (AbstractMessageProroductionHandler.java:426) в org.springframework.integration.handler.AbstractMessageProroductionHandler.produceOutput (AbstractMessageProroductionHandler.java:336) в org.sage.Message.springframework.integration.handler..java: 224) в org.springframework.integration.dispatcher.BroadcastingDispatcher.access $ 000 (BroadcastingDispatcher.java:56)по адресу org.springframework.integration.dispatcher.BroadcastingDispatcher $ 1.run (BroadcastingDispatcher.java:204) по адресу org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda $ execute $ 0 (ErrorHandlingTaskExectilcon.java.jp:.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)
Spring Integration версии 5.0.5
С уважением.