Spring Integration系列《1》 Hello World项目

这个Hello World项目是从spring官网下载,本地运行学习的。

Spring Integration官网地址
https://spring.io/projects/spring-integration#overview

Spring Integration 官方学习列子
https://github.com/spring-projects/spring-integration-samples

本Spring Integration系列 Hello World项目项目源码地址: https://gitee.com/bseaworkspace/study_java_web/tree/master/springIntegrationHelloWorld

代码结构和运行结果

代码运行方式

  • 执行PollerApp main方法
  • 执行HelloWorldApp main方法
    Spring Integration系列《1》 Hello World项目_第1张图片

运行时序图

Spring Integration系列《1》 Hello World项目_第2张图片

代码解析

package com.xsz;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.PollableChannel;
import org.springframework.messaging.support.GenericMessage;

/**
 * Demonstrates a basic Message Endpoint that simply prepends a greeting
 * ("Hello ") to an inbound String payload from a Message. This is a very
 * low-level example, using Message Channels directly for both input and
 * output. Notice that the output channel has a queue sub-element. It is
 * therefore a PollableChannel and its consumers must invoke receive() as
 * demonstrated below.
 * 

* View the configuration of the channels and the endpoint (a <service-activator/> * element) in 'helloWorldDemo.xml' within this same package. * * @author Mark Fisher * @author Oleg Zhurakousky * @author Gary Russell */ public class HelloWorldApp { private static Log logger = LogFactory.getLog(HelloWorldApp.class); public static void main(String[] args) { /** * ClassPathXmlApplicationContext Spring IOC 容器 * 第一个参数 xml文件路径 * 第二个参数JVM 创建对应对象 */ AbstractApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/integration/helloWorldDemo.xml", HelloWorldApp.class); /** * Channel: 消息发送者发送消息到通道(Channel),消息接受者从通道(Channel)接收消息 * */ MessageChannel inputChannel = context.getBean("inputChannel", MessageChannel.class); PollableChannel outputChannel = context.getBean("outputChannel", PollableChannel.class); inputChannel.send(new GenericMessage("World")); /** * PollableChannel.receive(long timeout) * Receive the first available message from this channel. * If the specified timeout is 0, the method will return immediately */ logger.info("==> HelloWorldDemo: " + outputChannel.receive(0).getPayload()); context.close(); } }

技术要点:

  • service-activator

用来连接应用的接口和message framework消息框架的组件,一个输入的频道input message channel必须被设定,一个service activator的方法被执行并且返回了一个值,那么可以提供一个输出频道output message channel(如果消息提供自己的返回地址,那么这是可选的)。这个规则适用于所有的consumer endpoints。输入从input channel到service activator再到message handler,然后返回output message到service activator到output message channel。归根结底:被继承组件的主要对外接口。
1.inputChannel是在本列中发挥的作用是传递参数
2. 对象helloService的sayHello方法接收参数
3.sayHello方法的返回值 ,会传给outputChannel

  • channel

消息传输的通道。分两种,一种是point-to-point点对点的,一种是publish-subscribe发布订阅形式的。如果是点对点的channel,至少会有一个消费者consumer能收到发送的message,另一种订阅发布的channel,spring integration试图去用广播的形式发布message给那些订阅者subscriber。
capacity属性是表示timeout时间。

META-INF/spring/integration/helloWorldDemo.xml




    

    
        
    

    

    


技术要点:

  • Channel Adapter

连接一个消息通道和其他实体之间的对象。channel adapter也分inbound内绑定和outbound外绑定。

Inbound通道适配:通常的作用是将一个外部系统的资源进行转换,通过消息通道输送到系统中,用于进行后续的处理。

Outbound通道适配:将系统中的资源通过消息通道发送给Outbound通道适配,然后该“Outbound通道适配”将其转换为外部的资源。

举例:的作用,将文件系统中的文件进行读取,将文件对象或者文件内容发送到消息通道中。

的作用,将处理好的文件资源输出到文件系统中。

META-INF/spring/integration/delay.xml





    
        
    

    

    

更多资料关注微信公众平台
Spring Integration系列《1》 Hello World项目_第3张图片

你可能感兴趣的:(Spring,Integration)