Spring integration Spring集成DSL在Java1.7中创建JMS消息驱动程序通道适配器

Spring integration Spring集成DSL在Java1.7中创建JMS消息驱动程序通道适配器,spring-integration,Spring Integration,我正在尝试为JMS MessageDriverChannelAdapter创建一个集成流,通过它我需要将消息发送到Kafka服务器。但我真的 当我试图将xml标记转换为特定于dsl的代码时卡住了,无法将xml转换为所需的dsl。有人能提供吗 任何指向它的指针,因为我不能在这里继续 我创建了一个MessageListenerContainer,如下所示 String brokerUrl = "tcp://101.11.102.125:31316"; String topic = "sometpoi

我正在尝试为JMS MessageDriverChannelAdapter创建一个集成流,通过它我需要将消息发送到Kafka服务器。但我真的 当我试图将xml标记转换为特定于dsl的代码时卡住了,无法将xml转换为所需的dsl。有人能提供吗 任何指向它的指针,因为我不能在这里继续

我创建了一个MessageListenerContainer,如下所示

String brokerUrl = "tcp://101.11.102.125:31316";
String topic = "sometpoic"; 
String kafkaBrokerUrl = "101.11.102.125:1012";
String kafkaTopic = "kafka_Topic";

@Bean
public DefaultMessageListenerContainer listenerContainer() {
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    ActiveMQConnectionFactory conFactory = new ActiveMQConnectionFactory();
    ActiveMQTopic mqTopic = new ActiveMQTopic(topic);           
    conFactory.setBrokerURL(brokerUrl);
    container.setConnectionFactory(conFactory);
    container.setDestination(mqTopic);
    container.setSessionTransacted(true);
    return container;
}
这些是我的输入和输出通道

@Bean
public MessageChannel jmsInChannel() {
     return MessageChannels.publishSubscribe().get();
}

@Bean
public MessageChannel jmsOutChannel() {
     return MessageChannels.publishSubscribe().get();
}

And this is my JMS adapter flow............

@Bean
public IntegrationFlow jmsMessageDrivenFlow() {
    return IntegrationFlows
            .from(Jms.messageDriverChannelAdapter(listenerContainer())                      
                   .autoStartup(true))                     
                   .channel(jmsInChannel())                                              
                   .get();
}
现在,我需要创建一个像这样的头enricher,但不能将其转换为DSL

<int:header-enricher input-channel="jmsInChannel" output-channel="jmsOutChannel">
<int:header name="kafkaBrokerUrl" value="${kafka.url}"></int:header>
<int:header name="kafkaTopic" value="${kafka.topic}"></int:header>
可能是这样的:

@Value("${kafka.url}")
private String kafkaBrokerUrl;

@Value("${kafka.topic}")
private String kafkaTopic;

....
@Bean
public IntegrationFlow jmsMessageDrivenFlow() {
    return IntegrationFlows
            .from(Jms.messageDriverChannelAdapter(listenerContainer())                      
                   .autoStartup(true))                     
                   .channel(jmsInChannel()) 
                   .enrichHeaders(new StringStringMapBuilder()
                                            .put("kafkaBrokerUrl", kafkaBrokerUrl)
                                            .put("kafkaTopic", kafkaTopic))
                   .handle("KafkaProducer", "produceToJmsKafka")
                   .get();
}
从这里我看不出有什么理由拥有那些
MessageChannel
bean,特别是像
publishSubscribe()

另一方面,因为我们提供了Spring集成Kafka适配器的实现。

可能是这样的:

@Value("${kafka.url}")
private String kafkaBrokerUrl;

@Value("${kafka.topic}")
private String kafkaTopic;

....
@Bean
public IntegrationFlow jmsMessageDrivenFlow() {
    return IntegrationFlows
            .from(Jms.messageDriverChannelAdapter(listenerContainer())                      
                   .autoStartup(true))                     
                   .channel(jmsInChannel()) 
                   .enrichHeaders(new StringStringMapBuilder()
                                            .put("kafkaBrokerUrl", kafkaBrokerUrl)
                                            .put("kafkaTopic", kafkaTopic))
                   .handle("KafkaProducer", "produceToJmsKafka")
                   .get();
}
从这里我看不出有什么理由拥有那些
MessageChannel
bean,特别是像
publishSubscribe()


另一方面,因为我们提供了Spring集成Kafka适配器的实现。

嗨,Artem,非常感谢您的回答,Spring DSL非常棒。但我对此有些怀疑。在实现JMS集成流enrichHeaders()时,遇到一个编译错误,即“方法enrichHeaders”(MapBuilderHi Artem,在得到编译错误后,我尝试过这样做。在我的原始帖子中编辑了代码。不确定集成流程。所以我可以这样做。你能提供任何关于这方面的指针吗。我认为一切看起来都很好。
.autoStartup(true)中没有任何理由)当然,我不确定您是否需要
.channel(jmsInChannel())
介于
.from()
.enrichHeaders()
之间,但我确定这段代码应该可以工作。嗨,阿泰姆,我的问题是,我可以使用MapBuilder()而不是StringMapBuilder(),因为StringMapBuilder()在我这方面出现了编译错误。嗨,阿泰姆,非常感谢你的回答,spring DSL非常棒。但我对此有些怀疑。在实现JMS集成流enrichHeaders()时,遇到一个编译错误,说“方法enrichHeaders”(MapBuilderHi Artem,在得到编译错误后,我尝试过这样做。在我的原始帖子中编辑了代码。不确定集成流程。所以我可以这样做。你能提供任何关于这方面的指针吗。我认为一切看起来都很好。
.autoStartup(true)中没有任何理由)当然,我不确定您是否需要
.channel(jmsInChannel())
介于
.from()
.enrichHeaders()
之间,但我确定这段代码应该可以工作。嗨,阿泰姆,我的问题是,我可以使用MapBuilder()而不是StringMapBuilder(),因为StringMapBuilder()在我这一方面是编译错误。
@Value("${kafka.url}")
private String kafkaBrokerUrl;

@Value("${kafka.topic}")
private String kafkaTopic;

....
@Bean
public IntegrationFlow jmsMessageDrivenFlow() {
    return IntegrationFlows
            .from(Jms.messageDriverChannelAdapter(listenerContainer())                      
                   .autoStartup(true))                     
                   .channel(jmsInChannel()) 
                   .enrichHeaders(new StringStringMapBuilder()
                                            .put("kafkaBrokerUrl", kafkaBrokerUrl)
                                            .put("kafkaTopic", kafkaTopic))
                   .handle("KafkaProducer", "produceToJmsKafka")
                   .get();
}