在现代企业应用中,消息传递是实现不同系统间数据交换的关键技术。随着技术的发展,出现了多种消息传递解决方案,其中Spring Integration(SI)是最新的解决方案之一。它得到了Spring社区的大力支持,并且得益于其成熟的依赖注入特性,SI可以作为非常强大的中间件工具使用。SI支持消息的路由和转换,使得不同的传输方式和数据格式能够无缝集成,同时不影响测试性和可扩展性。
Spring Integration的概念来源于Gregor Hohpe的《企业集成模式》一书,该书对许多常见的集成解决方案进行了分类和解释。要了解Spring Integration,有两个最好的学习资源:
此外,Mark Fisher的博客也值得一读。
示例应用是一个小型演示,展示了使用Spring Integration可以实现的功能。例如,它展示了如何轻松地设置一个POJO网关与ActiveMQ消息队列进行通信。从代码层面来看,开发者无需处理JMS的复杂性,只需简单的XML配置即可。代码保持了纯粹的POJO形式。同样值得注意的是,服务本身也是一个POJO。所拥有的只是一组转换器/路由器/端点/通道。
示例展示了如何将SOAP消息通过MQ发送,并且可以轻松地使用Spring Integration的XSLT/XPath支持进行处理。同时,还使用了Spring OXM和Castor进行序列化/反序列化。
SOAP消息的发送路径如下:
回复沿着相同的路径返回。会注意到服务器(JMSInboundGateway)/客户端(JMSOutboundGateway)位于同一个应用程序中,尽管这是为了简化,但可以很容易地分离出来。
代码使用Maven 2.0开发,所需要做的就是安装Maven。它将负责所有依赖项。下载项目并在Eclipse IDE中作为新的Java项目导入。如果在Eclipse IDE中安装了maven插件,那么可以在Eclipse本身中轻松构建项目。否则,在包含pom.xml的项目文件夹中,在命令行中运行以下命令:
mvn clean install
应用程序的主要流程包含在context.xml中,它由ClassPathApplicationContext加载。GatewayProxyFactoryBean负责创建SampleGateway的代理,并在代理上调用serve()方法,并将参数发送到JMSOutboundGateway。
OutBoundGateway然后将它传递给ActiveMQ。在另一端,JMSInboundGateway等待requestQueue,并捕获此请求,将SOAP XML消息传递给SI转换器和路由器,将其转换为POJO请求。请求由Service.add(Data)处理,响应放回inboundGateway,然后传递回ActiveMQ。ActiveMQ将响应传递回客户端JMSOutboundGateway,然后将其传递回SampleGateway作为返回值。