spring-integration开始使用spring-integration


备注

本节概述了Spring集成是什么,以及开发人员为什么要使用它。

它还应该提到春季整合中的任何大型主题,并链接到相关主题。由于弹簧集成的文档是新的,您可能需要创建这些相关主题的初始版本。

版本

发布日期
版本4.3.x 2016年11月7日
4.2.x版 2016年11月7日
4.1.x版 2016年7月25日
4.0.x版 2016年7月26日
3.0.x的 2015年10月27日
2.2.x中 2016年1月27日
2.1.x的 2013年6月10日
2.0.x版本 2013-04-11
1.0.x的 2010-04-16

通用入站和出站通道适配器

通道适配器是Spring Integration中的消息端点之一。它用于单向消息流。通道适配器有两种类型:

入站适配器 :通道的输入侧。倾听或主动阅读消息。

出站适配器 :通道的输出端。将消息发送到Java类或外部系统或协议。

在此处输入图像描述

  • 源代码。

    public class Application {
        static class MessageProducer {
            public String produce() {
                String[] array = {"first line!", "second line!", "third line!"};
                return array[new Random().nextInt(3)];
            }
        }
    
        static class MessageConsumer {
            public void consume(String message) {
                System.out.println(message);
            }
        }
    
        public static void main(String[] args) {
            new ClassPathXmlApplicationContext("classpath:spring/integration/stackoverflow/ioadapter/ioadapter.xml");
        }
    }
     
  • XML样式的配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:int="http://www.springframework.org/schema/integration"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd">
        <int:channel id="channel"/>
        <int:inbound-channel-adapter id="inAdapter" channel="channel" method="produce">
            <bean class="spring.integration.stackoverflow.ioadapter.Application$MessageProducer"/>
            <int:poller fixed-rate="1000"/>
        </int:inbound-channel-adapter>
        <int:outbound-channel-adapter id="outAdapter" channel="channel" method="consume">
            <bean class="spring.integration.stackoverflow.ioadapter.Application$MessageConsumer"/>
        </int:outbound-channel-adapter>
    </beans>
     
  • 消息流

    • inAdapter :入站通道适配器。每1秒调用一次Application$MessageProducer.produce 方法( <int:poller fixed-rate="1000"/> ),并将返回的字符串作为消息发送到通道channel
    • channel :传输消息的频道。
    • outAdapter :出站通道适配器。在通道channel 上到达消息后,此适配器将接收消息,然后将其发送到Application$MessageConsumer.consume 方法,该方法在控制台上打印消息。
    • 因此,您可以观察到这些随机选择字符串将每隔1秒显示在控制台上。

安装或设置

在项目中开始使用Spring-Integration的最佳方法是使用依赖管理系统,例如gradle。

dependencies {
    compile 'org.springframework.integration:spring-integration-core:4.3.5.RELEASE'
}
 

下面是一个使用网关服务激活器消息端点的非常简单的示例。

//these annotations will enable Spring integration and scan for components
@Configuration
@EnableIntegration
@IntegrationComponentScan
public class Application {
    //a channel has two ends, this Messaging Gateway is acting as input from one side of inChannel
    @MessagingGateway
    interface Greeting {
        @Gateway(requestChannel = "inChannel")
        String greet(String name);
    }

    @Component
    static class HelloMessageProvider {
        //a service activator act as a handler when message is received from inChannel, in this example, it is acting as the handler on the output side of inChannel
        @ServiceActivator(inputChannel = "inChannel")
        public String sayHello(String name) {
            return "Hi, " + name;
        }
    }

    @Bean
    MessageChannel inChannel() {
        return new DirectChannel();
    }

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        Greeting greeting = context.getBean(Greeting.class);
        //greeting.greet() send a message to the channel, which trigger service activitor to process the incoming message
        System.out.println(greeting.greet("Spring Integration!"));
    }
}
 

它将显示字符串Hi, Spring Integration! 在控制台中。

当然,Spring Integration还提供了xml风格的配置。对于上面的示例,您可以编写以下xml配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:int="http://www.springframework.org/schema/integration"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration
        http://www.springframework.org/schema/integration/spring-integration.xsd">
    <int:gateway default-request-channel="inChannel"
                 service-interface="spring.integration.stackoverflow.getstarted.Application$Greeting"/>
    <int:channel id="inChannel"/>
    <int:service-activator input-channel="inChannel" method="sayHello">
        <bean class="spring.integration.stackoverflow.getstarted.Application$HelloMessageProvider"/>
    </int:service-activator>
</beans>
 

要使用xml配置文件运行应用程序,您应该将Application 类中的new AnnotationConfigApplicationContext(Application.class) 代码更改为new ClassPathXmlApplicationContext("classpath:getstarted.xml") 。再次运行此应用程序,您可以看到相同的输出。

Spring-Integration-Stream的简单回声采样

在此处输入图像描述

Java代码:

public class StdioApplication {
    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("classpath:spring/integration/stackoverflow/stdio/stdio.xml");
    }
}
 

Xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:int="http://www.springframework.org/schema/integration"
       xmlns:int-stream="http://www.springframework.org/schema/integration/stream"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/integration/stream
       http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd
       http://www.springframework.org/schema/integration
       http://www.springframework.org/schema/integration/spring-integration.xsd">
    <int:channel id="channel"/>
    <int-stream:stdin-channel-adapter id="stdin" channel="channel">
        <int:poller fixed-rate="1000"/>
    </int-stream:stdin-channel-adapter>
    <int-stream:stdout-channel-adapter id="stdout" channel="channel"/>
</beans>
 

这是一个回声的例子。运行此Java应用程序时,可以输入一些字符串,然后它将显示在控制台上。