当前位置: 首页 > 知识库问答 >
问题:

Spring集成JavaDSL:如何使用channelMap方法路由到标题中的名称所在的通道?

羊舌迪
2023-03-14

如何使用channelMap方法路由到标题中的名称所在的通道?所以如果我尝试这样做

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

来了。

原因:org . spring framework . messaging . core . destinationresolutionexception:无法在BeanFactory中查找名为“headers['channelName']”的MessageChannel。;嵌套异常为org . spring framework . beans . factory . nosuchbeandetification异常:没有名为“headers['channelName']”的bean可用

共有1个答案

公孙嘉禧
2023-03-14

你可以这样做:

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

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

 类似资料:
  • 在spring integration (Java DSL)中,如何定义一个完整流程的事务? 通过Spring集成,我们可以定义一个示例流程: 我需要一个跨度整个流程的交易。目前,当我使用“aMessage转换器”访问数据库时,事务将在处理完此消息转换器后关闭。但是我需要一个在处理“另一个消息转换器”时仍未提交的事务? 我希望只需添加一个“@Transactional”(或@Transaction

  • 当msg处理抛出异常时,如何有效地支持JMS重新交付? 我有一个使用JMS(ActiveMQ)的流,它具有配置为允许n次重新传递尝试的连接工厂。 我希望在处理msg时出现任何错误,导致msg在connectionFactory配置允许的情况下被放回重新交付,然后在最大重新交付尝试用尽时,交付给DLQ。与AMQ保持一致。 对一个相关SO问题的回答意味着我可能会有一个重新抛出的错误通道,它应该触发重新

  • 在Symfony 4中是否可以通过yaml设置路由名称。 如此古老的诠释 Yaml注释 看起来yaml不支持名称键。只支持以下键: “资源”、“类型”、“前缀”、“路径”、“主机”、“方案”、“方法”、“默认值”、“要求”、“选项”、“条件”、“控制器”。 或者密钥“login”是名称吗?

  • 我有一个解压缩和文件的要求,并处理它的内容。在zip文件中,可以有两种类型的文件个人或公司。可以通过文件名区分的。在处理完所有文件后,它应该调用另一个程序模块,并将处理后的文件存档在不同的位置。希望使用Spring集成相同。我试图通过下面的代码来实现这一点,但它在基于文件名的路由时产生了问题。我使用的是JDK 8,Spring 5 例外 下面是整个代码段

  • 我正在开发一个spring集成应用程序,它有一个Kafka出站通道适配器,并使用spring集成java dsl配置流。 spring集成核心:4.2.4。释放 spring集成Kafka:1.3.0。释放 spring集成java dsl:1.1.2。发布 我已经配置了类似于以下代码段的消息处理程序规范。 我想添加一个ProducerListener。此功能已添加到此处的Spring集成kafk

  • null 如何在transform()步骤中添加Jaxb2Marshaller?