企业应用程序集成简介

article/2025/9/27 12:49:00

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。

在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来,您将深入研究Spring Integration的基础知识,例如通道,转换器和适配器。 在这里查看 !

目录

1.简介 2.企业整合模式 3.整合策略
3.1。 文件传输 3.2。 共享数据库 3.3。 远程过程调用 3.4。 讯息传递
4.消息驱动架构 5.同步和异步通信

1.简介

这是Spring Integration课程的第一部分。 本部分向您介绍什么是企业集成模式以及如何将不同的策略应用于设计集成解决方案。 之所以要在本课程中获得这些模式的基础知识,是因为Spring Integration项目是基于这些模式设计的。 本课程的以下部分将进入Spring Integration项目,并显示有关如何应用这些模式的实际示例。

2.企业整合模式

Enterprise Integration Patterns是由65种设计模式组成的组,该模式在书中以相同的名称进行编译,并由Gregor Hohpe和Bobby Woolf于2003年编写。定义这些设计模式的目的是需要标准化程序和建立模型。为开发人员提供的参考,以处理建筑集成解决方案。

这组集成设计模式是经验丰富的开发人员多年来重新使用实践的结果,它们每个都描述了针对特定设计问题(与不同系统之间的通信有关)的基本解决方案。

一旦完成本课程,您将了解Spring Integration的API如何基于这些企业集成模式,因为其设计灵感来自于上本书中解释的概念。 第一篇教程将简要介绍这些概念,以使您在了解如何构建Spring Integration时熟悉它们。

3.整合策略

应用程序或系统之间的集成任务一直非常困难。 部分原因是应用程序可以用不同的编程语言编写(由于一个系统无法理解另一个系统,因此无法进行通信)或使用不同的数据格式(消息不兼容)。 多年来,为了解决这些问题并完成集成应用程序的挑战,已采用了不同的方法。 基本上有以下四种简要描述的策略:

文件传输

此策略涉及应用程序通过使用文件共享信息。 您可以具有一个或多个应用程序来生成包含信息的文件(生产者),而其他应用程序将使用此数据(消费者)。 要考虑的最重要的事情之一就是确定文件中的数据将采用哪种标准格式,因为所有涉及的应用程序都应该知道如何处理它。 最受欢迎的格式之一是XML的使用。

设置数据格式后,可能会有多个应用程序以不同方式使用该文件中的信息。 为此,使用方的应用程序将需要一个具有目标的拦截器,以转换生成文件的格式,从而使其可以适应应用程序的要求。

图1

图1

主要优点是它使应用程序彼此分离。 消费应用程序不需要了解生产应用程序的内部。 拦截器将处理文件,因此只要它们保持相同的文件格式,任何涉及的应用程序中的更改都不会影响其他应用程序。

另一方面,这种方法通常会花费时间,因此如果您过于频繁地需要信息,则可能不是理想的选择。 某些应用程序可能需要尽快显示更新的信息。 在这种情况下,共享数据库可能是一个更好的选择。 要考虑的另一个方面是文件传输策略非常不安全,因为它不是事务性的,并且可能存在并发问题。

共享数据库

该解决方案基于具有存储所有需要共享的信息的中央数据库。 这样,如果您使用事务管理,则不同的应用程序将能够同时访问相同的数据。 通过使用相同的数据库,检索到的信息将保持一致并且是最新的。 而且,消费者可以快速访问信息,以确保您不会获取过时的数据。 如果使用文件传输,这将是您将要面对的缺点之一。

图4

图2

但是,您必须记住,如果多个应用程序访问同一数据,则可能会出现性能问题。 某些应用程序可能被阻止,试图修改另一个应用程序锁定的数据。

在设计数据库架构时会发现另一个困难。 生成的模式应适合所有涉及的应用程序。 此外,您还必须考虑到架构中的任何更改都会影响它们。 如今,如果您决定使用像MongoDB或Apache Cassandra这样的NoSQL数据库,则可能不会成为问题,因为这些类型的数据库使用无模式数据结构。 考虑每种类型的优缺点超出了本教程的范围。

远程过程调用

在前面讨论的方法中,生产者产生信息(存储在文件或数据库中),其他人可以使用它。 但是,如果您需要根据共享数据与其他应用程序进行交互,该怎么办? 这里存在一个问题,因为生产者不知道使用中的应用程序的内部。 您需要某种抽象机制。 这是远程过程调用的来源。

图3

图3

远程过程调用由一个应用程序通过存根与另一个应用程序直接交互组成。 客户端通过本地过程调用调用一个存根(client stub),然后存根将消息发送到服务器,另一个存根(骨架)将在其中接收消息并调用服务器过程。

这种方法的缺点是应用程序紧密耦合,并且调用速度很慢。 这将我们带到了最后一个策略,即消息传递。

讯息传递

如果您需要在应用程序之间交换少量信息,则更适合使用消息传递 。 消息传递的最大好处是组件(生产者和消费者)是分离的。 生产者可以发送消息而无需知道对方在哪。 可能会有一个或多个消费者将收到该消息,但这与生产者无关。

图2

图4

另一个重要功能是消息传递可以异步完成。 这意味着生产者可以发送消息并继续其逻辑,而不必阻塞以等待消费者返回响应。 消费者处理完消息并发送响应后,将通知生产者。

这种方法的主要缺点是它的复杂性,特别是在处理异步消息传递时。

企业集成模式的作者通常认为此策略是集成企业应用程序的最佳方法,而Spring Integration项目也基于该策略。 因此,本教程的其余部分将基于此策略。

基于这种策略的架构称为消息驱动架构。 下一节将说明其基本概念,在本课程中将广泛使用它们的基本概念。

4.消息驱动架构

消息驱动的体系结构是基于您在上一节中看到的消息传递策略的体系结构。 下面解释了构建此策略的基本概念:

  • 消息 :在应用程序之间或同一应用程序的不同组件之间共享的信息量。 该消息是一种数据结构,该结构由包含有关消息的元信息的标头和包含我们要共享的信息的正文组成。
  • 生产者 :创建(产生)消息并将其发送到消息通道的组件。 消息可以同步发送,因此生产者将阻塞其线程并等待,直到收到响应为止。 但是,如果处理可能需要一些时间,则有更好的选择。 生产者可以异步发送消息。
  • 消息通道 :消息通道是将生产者连接到一个或几个使用者的某种管道或队列。
  • 使用者 :从消息通道检索(消费)消息并对其进行处理的组件。 (可选)将响应发送回生产者。

这种消息驱动的方法松散地耦合了应用程序。 异步通信以一种应用程序不需要知道另一个应用程序是否处于活动状态的方式连接两个应用程序。 生产者可以发送消息而忽略它,继续自己的工作。 如果发送过程需要响应,将通知生产者以处理结果。

5.同步和异步通信

同步通信允许两个部分都处于活动状态的实时对话。 发送方发送消息,并等待接收方对其进行处理并返回响应。 当生产者需要立即响应以继续其任务时,这很有用。 这种类型的通讯有其缺点。 例如,如果接收方处理需要时间,则发送方需要完成的下一个任务将被延迟。 甚至更糟的是,消费者可能不活跃。 常见的解决方案是建立超时并在响应花费太多时间时进行处理。

异步通信允许两个部分解耦,每个部分可能在不同的时间起作用(接收方在发送时可能不处于活动状态)。 当发件人不需要立即响应时,这种方法很常见。 它将继续处理其任务,直到收到响应。 当接收器处理需要时间时,异步通信就足够了。

Spring Integration允许两种通信类型,每种通信都有其优点和缺点。 在本课程的以下教程中,您将了解如何实现这一目标,并能够确定在每种情况下哪一种更为合适。

翻译自: https://www.javacodegeeks.com/2015/09/introduction-to-enterprise-application-integration.html


http://chatgpt.dhexx.cn/article/1DL2qsyn.shtml

相关文章

C语言--冒泡法实现

#include <stdio.h>int main() { int i,j,a[10]; printf("Please input ten numbers: \n"); for(i0;i<10;i) //输入10个数组元素scanf("%d",&a[i]); for(i0;i<10-1;i) //n个数要进行n-1趟比较{ for(j0;j<9-…

冒泡法原理及实现

冒泡法原理及实现 第一次接触排序算法&#xff0c;简单写一下实现原理。 先看一道例题&#xff1a; 用户输入十个数据&#xff0c;将数据从大到小输出。 输入样例 1 30 23 56 0 199 -23 45 78 -200 输出样例 -200 -23 0 1 23 30 45 56 78 199 这里使用冒泡法。别的排序目前我也…

冒泡法与选择法!

数组排序的两种常见方法&#xff1a; 1.冒泡法 2.选择法 冒泡法&#xff1a;相邻两数比较交换&#xff0c;小升大沉&#xff0c;比较n-1次&#xff08;最后那个数的位置自动确定&#xff09;&#xff0c;每次比较中进行n-j次两两比较&#xff0c;每次比完最大的数到最后面。 代…

C语言:冒泡法排序

冒泡法排序指的是在排序时&#xff0c;每次比较数组中相邻的两个数组元素的值&#xff0c;将较小的数&#xff08;从小到大排列&#xff09;排在较大的数前面。 每一轮比较&#xff0c;数组中最大或最小的数就会从最右面冒出来。 举例&#xff1a; 99 32 -21 100 第一轮&#…

冒泡法

冒泡法 冒泡法的思路是:每次将相邻的两个数作比较,把较小的调到前头。 若有5个数a[0]~a[4]依次为 9-3-6-1-2. 第一趟:   a[0]和a[1]比较,9>3,互换位置,序列变成3-9-6-1-2;   a[1]和a[2]比较,9>6,互换位置,序列变成3-6-9-1-2;   a[2]和a[3]比较,9>1,…

冒泡法(基本原理和方法)(c语言篇)

学习冒泡排序法 一.引入数组概念 二.掌握循环嵌套 三.思考排序方法 四.编译程序 五.调试运用&#xff08;检错优化&#xff09; 一. *数组是一组具有相同数据类型的数据的有序集合。 *数组中的每一个元素都属于同一个数据类型。 *一个数组名和下标来唯一确定数组中的元素…

C语言排序之冒泡法(起泡法)

C语言排序之冒泡法&#xff08;起泡法&#xff09;C语言排序之冒泡法&#xff08;起泡法&#xff09; 冒泡的本质还是两两比较&#xff0c;第一次把最大或最小的选出来&#xff0c;第二次把老二选出来&#xff0c;这样的话就会少比一次&#xff0c;就这样循环下去就行啦&#x…

排序算法--冒泡法

冒泡法 原理是遍历文件&#xff0c;如果相邻的两个元素大小不符合预期&#xff0c;则进行交换&#xff0c;重复直到有序为止。 第一遍时&#xff0c;从左到右比较相邻两个元素&#xff0c;当两个元素中右边的元素较小时&#xff0c;将其与左边的元素进行交换。直到最终将最大…

排序算法之冒泡法(起泡法)

起泡法的理解及基本思路&#xff1a; 通俗理解就是将小的数浮上来&#xff0c;大的则沉底&#xff08;小浮大沉&#xff09;。 基本思路 每次将相邻两个数比较&#xff0c;将小的调到前面。如下图所示&#xff1a; 显而易知&#xff0c;共有六个数&#xff0c;在第一趟排序时…

冒泡排序法

冒泡排序法 冒泡排序法原理示意图 public static void ArraySortTest() {int[] ages {21,27,31,19,50,32,16,25};System.out.println(Arrays.toString(ages));//控制比较轮数for(int i1;i<ages.length;i) {//每轮比较多少for(int j0;j<ages.length-i;j) {if(ages[j]&…

冒泡法的讲解及使用

冒泡法是一种比较数组中数据大小的方法&#xff0c;基本思路是&#xff1a;每次将相邻两个数相比较&#xff0c;将小的调到前面。 例如&#xff1a;若有6个数:9,8,5,4,2,0 &#xff1b;先由第一个数与第二个数比较&#xff0c;小的数在前&#xff1b;再由第二个数与第三个数比…

冒泡法详解

目录 什么是冒泡法冒泡法思路代码的实现 什么是冒泡法 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;是一种计算机科学领域的较简单的排序算法。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端&#xff08;升序或降序排列&#xff09;&…

冒泡排序法(超详细)

冒泡排序法 文章目录 冒泡法的基本思路思路总结 程序实现 下面我们一起来看看排序中的冒泡排序法。 &#x1f4a1;[例]有5个数字&#xff0c;要求对它们按由小到大的顺序排列。 这种问题称为数的排序(sort)。排序的规律有两种:一种是“升序”&#xff0c;从小到大;另一种是“降…

【C语言】冒泡法排序

哈喽&#xff01; 大家好&#xff0c;我们今天结束C语言期末考试啦 不知道各位同学考完了没呢&#xff1f; 由于在考试前依然有很多同学不清楚冒泡法怎么用 这期我专门整理了一下冒泡法的用法&#xff0c; 供大家参考哦&#xff01; 我们先来看一下源代码&#xff1a; /…

2020年程序员日,是个特别的日子

大家调侃2020年是程序员的本命年&#xff0c;因为今年刚好碰上了2020-1024996的公式&#xff0c;发图纪念下。

「1024 程序员节」各大公司和程序员们都是怎么过的?你都做了哪些计划或安排?

鲁迅曾经说过&#xff1a;“这个世界上本没有节日&#xff0c;网友BB的多了&#xff0c;什么节日都可以有。” 上面就当笔者开个玩笑&#xff0c;但互联网时代&#xff0c;人造节日真的是越来越多了&#xff01; 当然&#xff0c;也被赋予了特殊的含义。 比如&#xff1a; 5…

1024 | 第一波程序员日福利

程序员日马上就要到了&#xff0c;熟悉老表(就是X先生本人哈)的读者肯定知道&#xff0c;福利特别多&#xff0c;程序员日这么关键的日子&#xff0c;怎么能不给大家送点福利呢&#xff1f;不&#xff0c;一点点&#xff0c;太少了&#xff0c;来波大的&#xff0c; 针对1024程…

程序员的假期

暑假这么长&#xff0c;想想是不是就觉得非常爽了呢&#xff1f; 虽然&#xff0c;假期之前 内心估计都这样祈祷过⇊ 但身为一名&#xff08;合格的&#xff09;程序员 假期真的离得开代码吗&#xff1f; 时不时得看一下公司的企业群&#xff0c; 时不时处理一下紧急的事情…

2022,了不起的程序员日历来啦!

日历一天天地翻过&#xff0c;转眼间 2021 年还剩下一个半月了。这一年&#xff0c;小伙伴们有怎样的收获&#xff1f;年初的读书计划、健身计划都落实的怎么样啦&#xff01;曾经信心满满立下的众多 Flag&#xff0c;如今都实现了没&#xff1f; 来说一个好消息&#xff0c;20…

1024 程序员日

1024程序猿节日快乐