Spring integration spring集成kafka xml多个主题不起作用

Spring integration spring集成kafka xml多个主题不起作用,spring-integration,Spring Integration,如果XML文件中只定义了一个主题,那么我的项目就可以正常工作。当我尝试添加另一个主题时,它无法生成任何主题的消息。 我的XML文件如下所示: <int-kafka:producer-configurations> <int-kafka:producer-configuration broker-list="127.0.0.1:9092" topic="test" key-cla

如果XML文件中只定义了一个主题,那么我的项目就可以正常工作。当我尝试添加另一个主题时,它无法生成任何主题的消息。 我的XML文件如下所示:

<int-kafka:producer-configurations>
    <int-kafka:producer-configuration broker-list="127.0.0.1:9092"
                   topic="test"         
                   key-class-type="java.lang.String"
                   value-class-type="java.lang.String"
                   value-encoder="encoder"
                   key-encoder="encoder"
                   compression-type="none"
                />
    <int-kafka:producer-configuration broker-list="127.0.0.1:9092"
                   topic="test2"            
                   key-class-type="java.lang.String"
                   value-class-type="java.lang.String"
                   value-encoder="encoder"
                   key-encoder="encoder"
                   compression-type="none"
                />
</int-kafka:producer-configurations>


任何知道我的问题的人都会帮上大忙,谢谢。看来你没有提供任何关于要转到哪个主题的信息

当只有一个主题时,在这种情况下,将使用它

如果有多个,您将得到一个异常:

throw new IllegalStateException("Could not send messages as there are multiple producer configurations " +
                "with no topic information found from the message header.");
默认情况下,适配器将在
kafka_topic
消息头中查找要路由到的主题


您还可以提供
主题表达式
,例如
topic expression=“headers['foo']”
,主题将从
foo
标题中获取。

这就是问题所在,如果我提供“topic='test',”我现在可以为主题“test”生成消息。但是,如果我想同时生成“test”和“test2”,那也没用。我正在考虑使用“主题表达”,我尝试了你的例子,但没有奏效。。顺便问一下,我遗漏了什么细节吗?我的生产者是这样的:channel.send(MessageBuilder.withPayload('test-message').setHeader(“messageKey”,“key”).setHeader(“topic”,“test”).build()
topic expression=“headers['topic']
应该可以工作。如果使用
setHeader(“kafka\u topic”,“test”)
,则不需要
topic
topic expression
。消息键头需要是
setHeader(“kafka\u messageKey”,“key”)
除非您有一个
表达式键表达式
。看起来您使用的是0.5中的旧标题名称;它们在1.0中被更改为带有
卡夫卡前缀,以与框架的其余部分保持一致,并避免与其他模块的标题冲突。感谢Gary,您的回答完美地解决了我的问题,在rE通过编写消息标题和主题表达式,“我的卡夫卡”现在可以生成和使用多个主题消息。很好。如果某个答案解决了您的问题,这里通常会将其标记为“已接受”(左侧投票计数器下方的勾号/复选标记)。这将帮助其他用户搜索类似的答案。