mycat和应用程序集成_企业应用程序集成简介

mycat和应用程序集成

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

在本课程中,向您介绍了企业应用程序集成模式以及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.企业整合模式

企业集成模式是由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

mycat和应用程序集成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336824.shtml

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

相关文章

activemq和jms_带有ActiveMQ和Maven的JMS Sender应用程序

activemq和jms我们已经看到了如何使用ActiveMQ和Maven创建JMS Receiver应用程序 。 让我们看看我们如何类似地创建JMS Sender应用程序 。 web.xml与创建接收器应用程序时使用的相同&#xff1a; <web-app xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi&qu…

java经纬度曲线简化_JAVA 后台计算 经纬度 最短距离

1、 代码块package com.ilogie.tms.util;import java.io.IOException;import java.math.BigDecimal;import java.text.MessageFormat;public class LocationUtils {// 以下为 获得 两点之间最短距离private static final BigDecimal EARTH_RADIUS MathUtil.toBigDecimal(6378.…

java ee的小程序_在Java EE应用程序中实现自动重试

java ee的小程序最初&#xff0c;我想将此博客称为“ 具有拦截器驱动的重试策略的灵活超时 ”&#xff0c;但后来我认为它太“繁重”。 该声明以及修改后的标题应该&#xff08;希望&#xff09;使您了解此帖子可能谈论的内容;-) 触发 这篇文章主要由我在较早的一篇文章中收到…

jboss eap 7_EAP 7 Alpha和Java EE 7入门

jboss eap 7红帽JBoss企业应用程序平台7&#xff08;JBoss EAP 7&#xff09;是基于开放标准构建并符合Java Enterprise Edition 7规范的中间件平台。 它建立在WildFly等经过验证的创新开源技术之上&#xff0c;这将使Java EE 7的开发更加容易。 这是有关如何开始使用最新ALPHA…

为什么说php单线程,php单线程的缺点是什么?

PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习&#xff0c;使用广泛&#xff0c;主要适用于Web开发领…

openshift 部署_在OpenShift上部署Java EE微服务

openshift 部署我昨天用WildFly Swarm在博客上发布了有关简单JAX-RS微服务的博客。 您学习了如何使用Maven构建所谓的“胖子”&#xff0c;还使用Maven Docker插件对我们的微服务进行了Docker化并在Docker Machine上本地运行。 这是在本地测试事物的好方法。 到目前为止&#x…

apache.camel_Apache Camel 2.16发布–十大亮点

apache.camelApache Camel 2.16于上周五发布。 这篇博客文章是我尝试在此新版本中进行前10名&#xff08;加1作为奖励&#xff09;的亮点。 1.动态到 来自骆驼用户的最常见的常见问题是&#xff0c;如何将消息发送到端点&#xff0c;uri应该使用消息中的动态值&#xff08;例…

设计模式示例_责任链设计模式示例

设计模式示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#x…

edmonds算法matlab,匈牙利算法的matlab实现

匈牙利算法算法简介算法原理算法实现(附代码)测试算法简介下面摘用百度百科中的解释。匈牙利算法(Hungarian method)是由匈牙利数学家Edmonds于1965年提出&#xff0c;因而得名。匈牙利算法是基于Hall定理中充分性证明的思想&#xff0c;它是二分图匹配最常见的算法&#xff0c…

java jooq_将Java EE与jOOQ结合使用的初学者指南

java jooqJava EE附带了自己的持久性API&#xff1a;JPA。 当您想要将RDBMS实体&#xff08;表/关系&#xff09;映射到Java实体&#xff08;类&#xff09;时&#xff0c;JPA最强大&#xff0c;主要遵循1&#xff1a;1映射策略。 其背后的思想是&#xff0c;业务逻辑通常不像关…

php扩展 waf,基于PHP扩展的WAF实现

访问一下看看结果&#xff1a;可以看到ls命令成功的执行了&#xff0c;也就是说我们的正常文件是不会被拦截的&#xff0c;而只有upload目录中的文件会被拦截&#xff0c;这样做又会引发另一个弊端&#xff0c;倘若攻击者通过某种方法将shell写入正常的文件中&#xff0c;或是与…

junit4 集成测试_使用JUnit规则进行干净的集成测试

junit4 集成测试JUnit Rules的优势&#xff0c;尤其是在进行集成测试时&#xff0c;几乎不能被高估。 在本文中&#xff0c;我们将阐明ExternalResource扩展的有用性。 在我们必须使用抽象外部资源的第三方库的情况下&#xff0c;这简化了灯具控制。 作为示例&#xff0c;我们将…

多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合

matlab的应用-多项式函数及多项式拟合 Matlab 的应用- 多项式函数及多项式拟合 本节将向大家简要介绍 matlab 在多项式处理方面的应用。 多项式函数主要有&#xff1a; roots 求多项式的根 poly 特征多项式 polyval 多 项式的计算 poly2str(p, x )多项式代换 polyfit 多项式曲线…

乐惠科技php面试题,程序员中的奇葩,使用php构建魔兽世界

这是用PHP编写的魔兽世界服务器。现在它已经调试了登录服务器的过程。目前的魔兽世界客户端是2.4.3_8606。服务器列表和帐户密码数据需要查询AUTH库。世界服务器身份验证过程已完成&#xff0c;数据包加密已完成后续进程正在开发中......数据库文件在根目录: sql/sql.7z今天在群…

javafx窗体程序_JavaFX真实世界应用程序:EIZO CuratOR Caliop

javafx窗体程序JavaFX Real-World应用程序第四号称为Caliop 。 它是EIZO为医院手术室开发的CuratOR解决方案的前端。 前端在壁挂式控制台上运行&#xff0c;并允许操作团队查找有关患者的信息&#xff0c;控制各种视频源到不同显示器的路由&#xff0c;录制视频&#xff0c;拍摄…

java8 streams_Java 8 Streams:过滤和谓词否定

java8 streams最近&#xff0c;有关LJC 邮件列表的成员在流中.filter方法中使用谓词否定的有趣讨论&#xff0c;因此我认为值得在博客文章中进行总结。 讨论是关于使用.filter和否定谓词的方法。 这篇文章的代码可以在我的github帐户中找到 。 也许这就是您可能会想到的方式&…

hystrix熔断 简介_Hystrix简介– Hello World

hystrix熔断 简介在以前的博客文章中&#xff0c;我介绍了需要像Netflix Hystrix这样的库的动机。 在这里&#xff0c;我将跳入一些非常基本的方法来开始使用Hystrix&#xff0c;并在更复杂的用例中进行跟进。 你好&#xff0c;世界 以下是“ Hystrix命令”的一个简单的Hello …

php中哪个函数用于读取文件,PHP内置函数fget读取文件

php fgets()函数从文件指针读取一行语法:fgets(file,length)参数说明必需的. 指定姚要读取的文件长度可选. 指定姚都区的字节数. 默认值为102字节从文件所指向的文件中读取一行&#xff0c;并返回最大长度为1个字节的字符串. 遇到换行符(包含在返回值中&#xff0c;)&#xff0…

c++返回指针时候注意提防_提防Java中的函数式编程!

c返回指针时候注意提防这对函数式编程并不会造成太大的影响&#xff0c;这真棒。 这是关于某些实践的警告&#xff0c;您很可能会将其应用于您的代码&#xff0c;而这是完全错误的&#xff01; 。 高阶函数对于函数式编程是必不可少的&#xff0c;因此&#xff0c;谈论它们将帮…

centos php支持yaf,CentOS环境下给PHP7.0安装yaf扩展

|CentOS环境下给PHP7.0安装yaf扩展在CentOS环境下给PHP7.0安装yaf扩展&#xff0c;首先要知道PHP的安装目录在哪里&#xff0c;以我当前的路径为例&#xff0c;在/usr/local/php目录下。下一步需要下载扩展包&#xff0c;进入http://pecl.php.net/package/yaf寻找符合版本要求的…