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,一经查实,立即删除!

相关文章

java中读取单个字符_如何使用Java中的Scanner类读取单个字符?

从Java 1.5开始引入Scanner类。此类接受File,InputStream,Path和String对象,使用正则表达式逐个令牌读取所有原始数据类型和String(从给定的源)令牌。默认情况下,空格被视为定界符(将数据分成令牌)。使用Scanner类读取字符Scanner…

java中的case1怎么说_Java Cas20ServiceTicketValidator類代碼示例

本文整理匯總了Java中org.jasig.cas.client.validation.Cas20ServiceTicketValidator類的典型用法代碼示例。如果您正苦於以下問題:Java Cas20ServiceTicketValidator類的具體用法?Java Cas20ServiceTicketValidator怎麽用?Java Cas20Service…

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

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

akka 消息发送接收_Akka型演员:探索接收器模式

akka 消息发送接收在上一篇文章中,我们研究了Akka Typed提供的一些基本功能。 在本文和下一篇文章中,我们将更进一步地了解一些其他功能,并通过查看Akka Typed提供的两种不同模式来做到这一点:Receiver和Receptionist模式。 如果您…

scale和java比较_浅谈java中BigDecimal的equals与compareTo的区别

这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等)。【注:以下所讲都是以sun jdk 1.4.2版本为例,其他版本实现未必…

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初始化hashset_JAVA中的Hashset类

HashSet扩展AbstractSet并且实现Set接口。它创建一个类集&#xff0c;该类集使用散列表进行存储。正像大多数读者很可能知道的那样&#xff0c;散列表通过使用称之为散列法的机制来存储信息。在散列(hashing)中&#xff0c;一个关键字的信息内容被用来确定唯一的一个值&#xf…

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

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

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;使您了解此帖子可能谈论的内容;-) 触发 这篇文章主要由我在较早的一篇文章中收到…

Java变长数组笛卡尔积_Java 8中的流作为流的笛卡尔积(仅使用流)

小编典典在示例中传递流永远比传递列表更好&#xff1a;private static Stream cartesian(BinaryOperator aggregator, List... lists) {...}并像这样使用它&#xff1a;Stream result cartesian((a, b) -> a b,Arrays.asList("A", "B"),Arrays.asLis…

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防止表单重复提交

后端防止重复提交的基本原理:服务器返回表单页面时&#xff0c;会先生成一个subToken保存于session&#xff0c;并把该subToen传给表单页面。当表单提交时会带上subToken&#xff0c;服务器获取表单信息判断session保存的subToken和表单提交subToken是否一致。若不一致或sessio…

spark在服务器运行示例_创建示例HTTPS服务器以获取乐趣和收益

spark在服务器运行示例通常&#xff0c;在开发或/和针对真实场景进行测试期间&#xff0c;我们&#xff08;开发人员&#xff09;面临着运行成熟的HTTPS服务器的需求&#xff0c;可能同时进行一些模拟。 在JVM平台上&#xff0c;除非您知道适合此工作的正确工具&#xff0c;否则…

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

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

sidecar_Spring Cloud Sidecar –节点初始化

sidecar在上一篇博客文章中&#xff0c;我描述了Sidecar应用程序如何用于在Eureka中注册Cassandra节点&#xff0c;更一般地&#xff0c;它可以用于在Eureka中注册任何非JVM应用程序。 在本文中&#xff0c;我将介绍应用程序如何查询Sidecar注册节点。 发现注册节点–初始化后…

php 对象 final,PHP7_OOP_对象重载以及魔术方法_对象遍历_final关键字

//对象遍历&#xff1a;class MyClass{public$var1 "value 1";public$var2 "value 2";public$var3 "value 3";protected$protected "pro var";private $private "privar";functioninterateVisible(){echo "MyClas…

供给测结构性改革内容_智能包装结构,提高可测性

供给测结构性改革内容有很多方法可以将整个应用程序分成多个包。 关于按功能或按层打包的优缺点的讨论可以在许多编程博客和论坛上找到。 我想从可测试性开始讨论这个主题&#xff0c;看看它是否会带来任何有意义的结果。 首先&#xff0c;让我们尝试描述我们通常希望跨不同层…

openshift_在OpenShift上扩展Java EE微服务

openshift这个小系列的前两个部分介绍了如何使用WildFly Swarm构建一个小型的JAX-RS服务并将其打包到Docker映像中 。 您学习了如何将此示例部署到OpenShift &#xff0c;现在是时候对其进行一些扩展了。 为什么扩展很重要 基于微服务的体系结构的关键方面之一是分解为高性能的…

php 异步post,php – 使用POST的异步cURL

我正在制作一个命令行应用程序.在执行登录过程后,我需要同时通过cURL发出多个POST请求 – 这意味着传出请求必须发送会话ID等.事件链如下&#xff1a;>我用curl_init打开cURL连接>我使用curl_exec登录远程站点发送POST请求,并获得返回的HTML代码作为响应>我同时向同一…