Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?

Posted

技术标签:

【中文标题】Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?【英文标题】:Spring Integration Java DSL: How to route with the channelMapping method to the channel which name is in the headers? 【发布时间】:2019-04-14 20:17:27 【问题描述】:

如何使用channelMapping 方法路由到标题中名称的频道?所以如果我试试这个

    @Bean
    private IntegrationFlow postDataToChannelX() 
            return f -> f
            ...
               .<String, Boolean> route(s -> s.equals("[]"), m -> m
                    .channelMapping(false, "headers['channelName']")
                    .channleMapping(true, ...);
    

来了

原因:org.springframework.messaging.core.DestinationResolutionException:未能在 BeanFactory 中查找名称为 'headers['channelName']' 的 MessageChannel。;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'headers['channelName']' available

【问题讨论】:

【参考方案1】:

你可以这样做:

.route(Message.class, (m) -> m.getHeaders().get("channelName"))

因此,您根本不需要任何映射,因为您直接在路由函数中解析到目标通道。

【讨论】:

编辑了问题。在channelMapping 之前有路线,所以我想我需要channelMapping。那么如何使用 channelMapping 方法路由到 header 中的频道呢? 好的。您也可以将其包含在路由功能中。我的意思是你做三元运算符并返回你需要的频道。该映射仅适用于静态通道 感谢您的回答

以上是关于Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA - Spring Integration Flow Transaction + com.atomikos.icatch.HeurHazardException:启发式异常

Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?

在 java 1.7 中将 JMS 出站通道适配器转换为等效的 Spring Integration DSL

Spring的Data Access/Integration(意思:整合,一体化)包含的模块

spring integration:如何从 Spring Controller 调用 Spring Integration?

MyBatis(3.2.3) - Integration with Spring