2015-07-28 55 views
0

我想将以下内容转换为spring-integration java dsl。使用Java DSL设置pub-sub-domain

<int:channel id="partsSubscriberChannel" /> 

    <int-jms:message-driven-channel-adapter 
     id="jmsPartsInbound" 
     acknowledge="transacted" 
     destination-name="parts.topic" 
     channel="partsSubscriberChannel" 
     pub-sub-domain="true" 
     connection-factory="jmsConnectionFactory"/> 

这是我最高:

@Bean 
public MessageChannel partsErrorChannel() { 
    return new DirectChannel(); 
} 

@Bean 
public MessageChannel partsSubscriberChannel() { 
    return new DirectChannel(); 
}  

@Bean 
public IntegrationFlow partsSubscription(ConnectionFactory connectionFactory) { 
    return IntegrationFlows 
      .from(Jms.messageDriverChannelAdapter(connectionFactory) 
        .id("partsJmsSubscriber") 
        .destination(Topic.PARTS.getName()) 
        .outputChannel(partsSubscriberChannel()) 
        .errorChannel(partsErrorChannel())) 
      .get(); 
} 

如何设置pub-sub-domainacknowledge XML属性?

回答

0

这是当前不可直接使用DSL,但你可以在属性设置一个监听器容器连线...

@Bean 
public IntegrationFlow jmsMessageDriverFlowWithContainer() { 
    return IntegrationFlows 
      .from(Jms.messageDriverChannelAdapter(container()) 
        .id("foo")) 
        .errorChannel(errorChannel())) 
      .channel(outputChannel() 
      .get(); 
} 

@Bean 
public AbstractMessageListenerContainer container() { 
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(); 
    container.setSessionTransacted(true); 
    container.setDestinationName(Topic.PARTS.getName()); 
    container.setPubSubDomain(true); 
    return container; 
} 
+0

感谢,并AbstractMessageListenerContainer类需要一个@Bean?原因是我将创建许多不同的主题,所以Topic.PARTS.getName()会传递一个参数。 – jax

+0

不,它不会,只要您不需要稍后将其作为参考(例如在运行时更改并发消费者等)。顺便说一下,我之前创建了一个[拉请求](https://github.com/spring-projects/spring-integration-java-dsl/pull/41),以将工厂方法添加到'Jms'来构建容器。但是,在将它集成到发行版之前还有一段时间。 –

+0

我现在实际上在类[javax.jms.Session]'中找不到'org.springframework.core.ConstantException:Field'AUTO'。 – jax