←←←←←←←←←←←← 快,点关注!
Spring Integration Java DSL已经融合到Spring Integration Core 5.0,这是一个聪明而明显的举动,因为:
- 基于Java Config启动新Spring项目的每个人都使用它
- SI Java DSL使您可以使用Lambdas等新的强大Java 8功能
- 您可以使用 基于IntegrationFlowBuilder的Builder模式构建流
让我们看看基于ActiveMQ JMS的示例如何使用它。
Maven依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-kahadb-store</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.integration/spring-integration-java-dsl -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-java-dsl</artifactId>
<version>1.2.3.RELEASE</version>
</dependency>
</dependencies>
欢迎大家加入粉丝群:963944895,群内免费分享Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服务、Dubbo框架、Redis缓存、RabbitMq消息、JVM调优、Tomcat容器、MySQL数据库教学视频及架构学习思维导图
示例1:Jms入站网关
我们有以下ServiceActivator:
@Service
public class ActiveMQEndpoint {
@ServiceActivator(inputChannel = "inboundChannel")
public void processMessage(final String inboundPayload) {
System.out.println("Inbound message: "+inboundPayload);
}
}
如果您想使用SI Java DSL 将inboundPayload从Jms队列发送到Gateway风格的激活器,那么请使用DSL Jms工厂:
@Bean
public DynamicDestinationResolver dynamicDestinationResolver() {
return new DynamicDestinationResolver();
}
@Bean
public ActiveMQConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory();
}
@Bean
public DefaultMessageListenerContainer listenerContainer() {
final DefaultMessageListenerContainer defaultMessageListenerContainer = new DefaultMessageListenerContainer();
defaultMessageListenerContainer.setDestinationResolver(dynamicDestinationResolver());
defaultMessageListenerContainer.setConnectionFactory(connectionFactory());
defaultMessageListenerContainer.setDestinationName("jms.activeMQ.Test");
return defaultMessageListenerContainer;
}
@Bean
public MessageChannel inboundChannel() {
return MessageChannels.direct("inboundChannel").get();
}
@Bean
public JmsInboundGateway dataEndpoint() {
return Jms.inboundGateway(listenerContainer())
.requestChannel(inboundChannel()).get();
}
通过dataEndpoint bean 返回JmsInboundGatewaySpec,您还可以向SI通道或Jms目标发送回复。查看文档。
示例2:Jms消息驱动的通道适配器
如果您正在寻找替换消息驱动通道适配器的XML JMS配置,那么JmsMessageDrivenChannelAdapter是一种适合您的方式:
@Bean
public DynamicDestinationResolver dynamicDestinationResolver() {
return new DynamicDestinationResolver();
}
@Bean
public ActiveMQConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory();
}
@Bean
public DefaultMessageListenerContainer listenerContainer() {
final DefaultMessageListenerContainer defaultMessageListenerContainer = new DefaultMessageListenerContainer();
defaultMessageListenerContainer.setDestinationResolver(dynamicDestinationResolver());
defaultMessageListenerContainer.setConnectionFactory(connectionFactory());
defaultMessageListenerContainer.setDestinationName("jms.activeMQ.Test"