企业应用程序集成简介

本文是我们名为“ 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://www.mzph.cn/news/356528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现用户输入用户名和密码不能为空_Python学习【第四篇】用户输入及判断...

用户输入:例1。写一个小程序为用户输入密码。流程如下:1。用户输入其用户名2。输出\u201CHello 用户名\\/usr\/bin\/env python # name raw_input(\u201C你叫什么名字?\u201D)只在pythonname # 输入(\u201C你叫什么名字?\u201D)打印(\u201CHello\u201D名字)例2。当输入一个密…

win7 网络端口怎么设置_教你win7如何设置网络共享文件夹

网络共享是以PC机为载体的信息资源共享。如果我们想让其他人共享我们的文件夹,我们需要进行一些设置。今天,我将分享在win7系统中设置网络共享文件夹的方法现在大多数家庭都使用win7系统,它简化了很多设计,使用起来也很方便。它不…

junit testng_TestNG或JUnit

junit testng多年以来,无论何时使用Java代码进行单元测试,我始终会回到TestNG。 每当我拿起TestNG时,人们都会问我为什么要继续使用TestNG,尤其是默认开发环境(例如Eclipse或Maven)提供的JUnit时。 继续进行…

背单词

背单词 (word.c/cpp/pas) 【题目描述】 fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词。 看着满篇的单词非常头疼, 而每次按照相同的顺序背效果并不好,于是 fqk 想了一种背单词的好方法!他把单词抄写到一个 n 行…

vue 字符串分割_嗯哼vue组件taginput包教不包会

5分钟实现一个Tag-Input(标签)组件前言本文是wo写组件设计的第一篇文章(处女作),之所以会写组件设计相关的文章,是因为作为一名优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去辛(dao)勤(gen)劳(huo)动(zhong)&#xff0c…

一元操作符——递增和递减操作符(第一次写博客,紧张.)

一元操作符,即只能操作一个值的操作符,是JS中最简单的操作符。 1.递增和递减操作符 分为2个版本:前置型和后置型。若使用前置递增操作符给一个数值加1,要把()放在数值前面: var a 1;a; > va…

Spring 4.2中由注释驱动的事件侦听器

介绍 在应用程序内交换事件已成为许多应用程序中必不可少的部分,幸运的是,Spring为瞬态事件(*)提供了完整的基础结构。 最近对事务绑定事件的重构为我提供了一个借口,以在实践中检查Spring 4.2中引入的新的注释驱动事件…

mysql插入数据不成功_mysql插入数据失败原因分析

今天在做一个项目时,就是把一个数据库里面的资料导入到另一个数据库里面。想想很简单啊,就是用sql语句,把一个数据库里面数据select读取出来,然后循环update到另一个数据库里面。其实操作起来也很简单的,但是中途出现了问题&#…

SpringBoot项目部署与服务配置

spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中&a…

mysql排序两位数_MySQL_Mysql row number()排序函数的用法和注意,虽然使用不多,但是也有情况 - phpStudy...

Mysql row number()排序函数的用法和注意虽然使用不多,但是也有情况是需要在mysql 里面写语句开发功能的。在sql server 使用惯了,习惯了使用row_number() 函数进行排序,但是mysql 确没有这样一个函数。然后找到了po主写的一篇 文章。通过变量…

UIView动画效果

UIView是iOS系统中界面元素的基础, 所有的界面元素都是继承自它.它本身完全由CoreAnimation来实现的.它真正的绘图部分,是由一个CALayer类来管理.UIView本身更像一个CALayer的管理器,访问它的跟绘图和坐标有关的相关属性. iOS的画面切换效果的API主要通过调用系统已定义的动画效…

mysql bin.000047_mysql-bin.0000X 日志文件处理

一、清除文件[rootjiucool var]# /usr/local/mysql/bin/mysql -u root -pEnter password: (输入密码)Welcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 264001Server version: 5.1.35-log Source distributionType ‘help;’ or ‘/h’…

向导页设计_向导设计模式

向导页设计我们都喜欢巫师……。 (我的意思是软件向导)。 我们总是很高兴跳到那些“下一步”按钮上,就像我们在我们的时髦的小鸡上跳舞一样。。。 因此,今天我们将您心爱的向导带入您的编码体验。 让我们跳入一个例子。 假设您要设…

Java第十天

线程间通讯: 多个线程在处理同一资源,但是任务却不同。 多生产者,多消费者的问题: if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。 while判断标记,解决了线程获取执行…

使用Apache Drill深入研究当今的大数据

自2014年9月首次提供Beta版以来, Apache Drill一直在获得广泛的用户采用和社区动力。2015年5月发布了Drill的通用版本-Drill 1.0,此后,许多客户已在生产中部署和使用了Drill。 在此博客文章中,我将简要总结客户在Drill中发现的宝贵…

mysql grep 提取错误日志_详解grep获取MySQL错误日志信息的方法

为方便维护MySQL,写了个脚本用以提供收集错误信息的接口。这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径。以下是全部相关代码:#!/usr/bin/env python2.7#-*- encoding: utf-8 -*-"""该模块用于…

微信小程序需要https后台的创业机会思考

最近比较关注微信小程序,而且微信小程序的后台必须强制要求https, https相对http成本要高很多了。 这里我感觉有2个商机 (1)提供https 中转服务器 ,按流量来收费 (2) 微信小程序https 云后台 对于很多人学…

aspx是什么语言_什么是网页

第一个问题,什么是网页?我们通常在网上浏览的所有网页都是网页,一个网站由一页到50页不等的网页组成,一些大型网站可能包含数千万页,是第一个打开网站的网站。这些页面被称为主页。专有名词:这里简要介绍网页、网站和主…

[Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建

一、前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程。该工程是基于nodejs和redis写成的一个简单的工程。针对nodejs和redis会在后面介绍。 It is a Node.js* application written using Express* (https://github.com/stro…

将Lucene搜索集成到应用程序中

本文是我们名为“ Apache Lucene基础知识 ”的学院课程的一部分。 在本课程中,您将了解Lucene。 您将了解为什么这样的库很重要,然后了解Lucene中搜索的工作方式。 此外,您将学习如何将Lucene Search集成到您自己的应用程序中,以…