Spring Integration 快速入门教程

这篇具有很好参考价值的文章主要介绍了Spring Integration 快速入门教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文通过小的实际示例介绍Spring Integration(SI)的核心概念。Spring Integration提供了许多功能强大的组件,这些组件可以极大地增强企业架构内系统和流程的互连互通。

它实现了一些优秀且常用的设计模式,帮助开发人员避免从头设计自己的模式。我们将探讨SI如何在企业级应用程序中实现的特定需求,以及为什么它比一些替代方案更合适。我们还将介绍一些有力工具,进一步简化SI应用程序开发。

增加相关依赖

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-core</artifactId>
    <version>4.3.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-file</artifactId>
    <version>4.3.5.RELEASE</version>
</dependency>

如果使用Spring boot,则增加spring-boot-starter-integration:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-integration</artifactId>
</dependency>

消息模式

这个库中的基本模式之一是消息传递。该模式以消息为中心——其有效负载为实际传递数据,通过预定义的通道从原始系统或进程转移到一个或多个系统或进程。

该模式是最灵活的集成多个不同系统的方式,其方式如下:

  • 几乎完全解耦涉及到集成的系统;
  • 允许参与集成的系统完全不知道彼此的底层协议、格式或其他实现细节;
  • 支持开发和重用集成中涉及的组件;

消息集成实例

下面通过一个简单示例,实现从源文件夹拷贝文本文件至目标文件夹,配置如下:


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.annotation.Poller;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.file.FileReadingMessageSource;
import org.springframework.integration.file.FileWritingMessageHandler;
import org.springframework.integration.file.filters.SimplePatternFileListFilter;
import org.springframework.integration.file.support.FileExistsMode;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;

import java.io.File;

@Configuration
@EnableIntegration
public class SiBaseConfig {
    public final String INPUT_DIR = "D:\\readfile\\in";
    public final String OUTPUT_DIR = "D:\\readfile\\out";
    public final String FILE_PATTERN = "*.txt";

    @Bean(name = "fileChannel")
    public MessageChannel fileChannel() {
        return new DirectChannel();
    }

    @Bean
    @InboundChannelAdapter(value = "fileChannel", poller = @Poller(fixedDelay = "1000"))
    public MessageSource<File> fileReadingMessageSource() {
        FileReadingMessageSource sourceReader= new FileReadingMessageSource();
        sourceReader.setDirectory(new File(INPUT_DIR));
        sourceReader.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
        return sourceReader;
    }

    @Bean
    @ServiceActivator(inputChannel= "fileChannel")
    public MessageHandler fileWritingMessageHandler() {
        FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(OUTPUT_DIR));
        handler.setFileExistsMode(FileExistsMode.REPLACE);
        handler.setExpectReply(false);
        return handler;
    }
}

上面代码配置了一个service activator,一个集成通道,以及一个入站通道适配器。稍后将详细讲解这些组件。@EnableIntegration注解标识该类为Spring集成配置类。

Spring boot启动类,不用增加内容:


@SpringBootApplication
public class SiLab1Application {
    public static void main(String[] args) {
        SpringApplication.run(SiLab1Application.class, args);
    }
}

运行持续,在源文件夹增加文件,会自动复制到目标文件夹。

下面我们再看一个示例,从控制台输入数据,直接在控制台输出内容:

@Bean(name = "stdChannel")
public MessageChannel inputChannel() {
    return new DirectChannel();
}

@Bean
@InboundChannelAdapter(value = "stdChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<?> stdOutMessageSource() {

    return new ByteStreamReadingMessageSource(System.in, 1024);
}

@Bean
@ServiceActivator(inputChannel= "stdChannel")
public MessageHandler stdInMessageSource() {

    return new ByteStreamWritingMessageHandler(System.out, 1024);
}

首先定义直接通道,然后定义入站适配器,在定义ServiceActivator,分别指定标准输入、输出流。通过上面两个示例,大概了解Spring Integration的用法和能力,下面我们进一步介绍框架主要组件。

Spring集成组件

Message

org.springframework.messaging.Message接口定义了Spring消息,Spring集成上下文中传输数据单元:


public interface Message<T> {
    T getPayload();
    MessageHeaders getHeaders();
}

接口定义了两个关键元素的访问:

  • 消息头,即键值对容器,用于传输元数据,在org.springframework.messaging.MessageHeaders类中定义。
  • 消息体,实际传输数据的内容,上面示例中为文件。

Channel

Channel是Spring Integration(实际上,EAI)体系结构中的基本管道,消息通过Channel从一个系统中转到另一个系统。

你可以将它视为管道,通过它集成的系统或进程可以向其他系统推送消息(或从其他系统接收消息)。Spring Integration中的通道有多种形式,它们提供了灵活的配置属性,且几乎开箱即用,不需要任何编码。当然如果有自定义需求,也可以使用健壮的框架快速实现。

  • Point-to-Point (P2P)

Point-to-Point (P2P) channels用于在系统或组件间建立 1-to-1 消息通道. 一个组件发布消息到通道,另一个从通道接收。在通道两边仅有一个组件。
我们看到配置通道非常简单,仅需返回DirectChannel实例:

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

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

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

这里定义了三个通道,并通过各自方法名作为其标识。

  • Publish-Subscribe (Pub-Sub)

Publish-Subscribe (Pub-Sub) 通道用于在系统或组件间建立一对多消息通道,因此我们可以同时给上面三个通道发送消息。

下面实例创建代替P2P的 pub-sub 通道:

@Bean
public MessageChannel pubSubFileChannel() {
    return new PublishSubscribeChannel();
}

@Bean
@InboundChannelAdapter(value = "pubSubFileChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource() {
    FileReadingMessageSource sourceReader = new FileReadingMessageSource();
    sourceReader.setDirectory(new File(INPUT_DIR));
    sourceReader.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
    return sourceReader;
}

现在,我们已经将入站通道适配器转换为发布到Pub-Sub通道。这将允许我们将从源文件夹读取的文件发送到多个目的地。

桥接(Bridge)

桥接在Spring 集成框架中用于连接两个不能直接相连的通道或适配器。下面实例使用桥接连接Pub-Sub通道到三个不同的P2P的通道,因为Pub-Sub通道和P2P通道不能直接连接:

@Bean
@BridgeFrom(value = "pubSubFileChannel")
public MessageChannel fileChannel1() {
    return new DirectChannel();
}

@Bean
@BridgeFrom(value = "pubSubFileChannel")
public MessageChannel fileChannel2() {
    return new DirectChannel();
}

@Bean
@BridgeFrom(value = "pubSubFileChannel")
public MessageChannel fileChannel3() {
    return new DirectChannel();
}

上面代码配置pubSubFileChannel 桥接到 三个 P2P 通道,@BridgeFrom注解用于定义桥接。上述代码可描述为:创建桥接,从pubSubFileChannel通道到ileChannel1, fileChannel2, fileChannel3三个通道,使得从pubSubFileChannel通道的消息可同时传输到三个通道。

Service Activator

Service Activator是任何给定方法标注@ServiceActivator注解的POJO。使得当从入站通道接收到消息时执行POJO的方法,并支持些消息值出战通道。上面示例中从input通道接收文件写入配置的文件夹。

Adapter

Adapter是企业级集成模式的组件,支持给系统或数据源增加插槽适配器,就像在墙上安装插座或其他电子设备。它支持对数据库、FTP服务器和JMS、AMQP等消息系统以及Twitter等社交网络等提供开箱即用的可重用连接。连接到这些系统的需求很常见,因此适配器能够移植、重用。(事实上,适配器种类不多,Spring Integration已经内置大部分常用适配器)。

适配器大致可分类两类:入站和出战。下面通过上面示例分析两类适配器。

入站适配器配置包括:

  • 通过@InboundChannelAdapter注解将bean配置为适配器———参数包括入站通道(在本例中是txt文件)和轮询器,轮询器确定按指定的时间间隔轮询已配置的文件夹。
  • 返回FileReadingMessageSource的标准Spring Bean,这是处理文件系统轮询的具体类实现。

出站适配器用于向外发送消息。Spring Integration提供各种常用的开箱即用的出战适配器。

总结

本文简单演示了基于Java 配置Spring Integration示例,集成应用可以作为单独的应用运行,也可以作为企业级应用的一个部分。虽然它不直接与其他以EAI为中心的产品和模式(如企业服务总线)竞争,但它是一种可行的、轻量级的替代方案,可以解决许多需要构建ESB才能解决的问题。文章来源地址https://www.toymoban.com/news/detail-438431.html

到了这里,关于Spring Integration 快速入门教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring事务管理 -- Spring快速入门保姆级教程(五)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月08日
    浏览(48)
  • 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)

    【spring authorization server系列教程】(一)入门系列,快速构建一个授权服务器 spring authorization server是spring团队最新的认证授权服务器,之前的oauth2后面会逐步弃用。不过到现在发文的时候,我看到官网已经把之前oauth2仓库废弃了。 现在spring authorization server已经到生产就绪阶段了

    2024年02月05日
    浏览(53)
  • 工具系列(七) 本文(4万字) | Git入门教程 | 初始本地仓库-推送合并到远程仓库 | 解读VScode与PyCharm配置与使用git | CodeGeeX与Tabnine使用 |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程

    2024年02月21日
    浏览(59)
  • MaterialDesignInXAML WPF入门教程 快速入门

    先去MaterialDesignInXAML下载下来源码,以及Releases,在DemoApp 中就可以看到实际的效果很惊艳了。 除了要有一定的C#、winform 基础外,建议先学习一下 XAML,对整个开发环境有个基础的了解,再来学习此教程。 可以去bilibili上免费学习一下。教程一共12个小时,如果不看后面的实战

    2024年02月05日
    浏览(53)
  • C语言快速入门教程1快速入门 2指令 3条件选择

    C是一种编程语言,1972年由Dennis Ritchie在美国AT T的贝尔实验室开发。C语言变得很流行,因为它很简单,很容易使用。今天经常听到的一个观点是--\\\"C语言已经被C++、Python和Java等语言所取代,所以今天何必再去学习C语言\\\"。我很不赞同这种观点。这有几个原因。这些原因如下:

    2024年02月03日
    浏览(42)
  • Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问题成了一个很头痛的事。而git正是为了解决这种问题而诞生。本文将详细介绍如何通过淘宝镜像进行git的安装以及git的简单入门技巧。 下一章: git与远程仓库的交

    2024年02月03日
    浏览(87)
  • Eslint 快速入门教程

    eslint 是一个代码检查工具包,用来检查代码的规范。 而相比之下,prettier 是一个代码格式化工具。 解决代码风格不一致的问题 可以实现自动修复一些结构、风格问题 默认是只修复 js 语法的,其他的语言和框架需要配置 高灵活度、配置自由 对于团队来说,统一项目的代码

    2024年01月16日
    浏览(68)
  • angular快速入门教程

    安装: 1.安装node.js 2.安装angular 3.创建项目 4.文件结构: 5.运行 组件: 项目根模块:app.module.ts 定义的组件都需要在app.module.ts文件里先进行import引入 然后在@NgModule({deckartions:[]})声明 定义组件模板的两个方式: 1.使用templateurl引用一个html文件 2.使用template +es6的模板字符串

    2023年04月08日
    浏览(40)
  • Git 新手快速入门教程

    1. 何为版本控制 版本控制是一种记录文件变化的系统,可以跟踪文件的修改历史,并允许用户在不同版本之间进行比较、恢复或合并。它主要用于软件开发过程中管理代码的变更,但也可以应用于任何需要跟踪文件变更的场景。 版本控制系统(VCS)可以帮助团队协作开发,

    2024年04月26日
    浏览(56)
  • c++教程1快速入门

    欢迎来到令人兴奋的C++编程世界。本章将演示如何创建简单的C++程序,以及如何在程序中存储数据。 C++简介 安装编译器 编写第一个程序 编译和运行程序 创建变量 使用变量数组 使用向量数组 声明常量 C++是C编程语言的扩展,早在1972年由Dennis Ritchie首次在UNIX操作系统上实现

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包