SOA专题

SOA之企业应用集成EAI

  企业集成对公司管理提出显著转变的需要,致力于 一体化的努力通常对业务产生深远的影响,但是如果缺乏标准的集成方案,导致概念和技术学习难度增加。

集成定义:将不同的计算机系统,公司或个人连接起来, 企业集成是使不同的应用程序协同工作,产生一个统一的功能集的任务。

集成类型

  • 信息门户
  • 数据复制
  • 共享业务功能
  • 面向服务的体系结构
  • 分布式业务流程
  • 企业对企业集成

企业集成模式:

  • 文件传输
  • 共享数据库
  • 远程过程调用
  • 消息

基于消息的EAI:

eai

消息集成分以下步骤实施:

  • construction消息构建
  • Channels 通道
  • Endpoints 端点
  • Routing 路由
  • Transformation 转换
  • Management 管理
  • Messaging Models 消息模型
  • Transactions 事务

  目前有Spring Integration, Mule ESB 和 Apache Camel. 三种开源集成框架,它们都遵循企业集成模式EIP(EIP, http://www.eaipatterns.com),各有细微的区别。

Construction 消息构建

  消息是一个数据单元格式, 一个消息由一个头,属性和主体的组成 发送方转换数据输出构造消息 接收方重新从消息恢复成自己的数据模型 。

  (1). Spring集成的消息模型如下:

特点:

  • 一个基于模型的消息中最简单的形式
  • 使用泛型规定消息体类型
  • 无marshaling 或 un-marshaling 需要

  (2). JBI(Java业务集成)的模型如下:

特点:支持附件和XML 以及安全。

  (3). Apache Camel的消息模型:

消息交换模式(基于WSDL 2.0 message exchange patterns EXP):消息被封装到消息交换Exchange中。

exchange

 

Channels 消息通道

  信道是用于从发送者发送消息到接收器的网关, 发送者和接收者不知道对方,实现最大化松耦合,也 可以被称为管pipe

  (1). Spring Integration的通道是一个纯POJO模型:

  (2). Java Business Integration JBI是一个创建消息交换的工厂,支持同步或异步。

 

Endpoints 消息端点

  一个端点是一个消息传递应用程序,它能够发送和接收消息的客户端, 消息端点封装了消息系统,并与应用程序分离,也是其一部分,自定义了为特定的应用程序和任务的一般消息处理API

 

  (1). Spring Integration实现:

代码实现如下:

  消息通道最大的问题是:通道容纳消息总会有一个容量,如果有大量消息发送到,而接受者并没有来得及消费,那么需要很大的容量保留这些消息,这是因为传统通道是一个顺序处理的模型,使用SEDA: Staged Event-Driven Architecture 阶段EDA能够解决这个问题。通过引入线程池立即响应消息处理。

  事件队列接受传入的事件, 事件处理器EventHanlder处理传入的事件, 线程池提供了线程功能的事件处理程序, 该控制器调节资源分配和调度动态。

 

Routing 消息路由

  消息路由器会从一个消息通道消费消息,并根据一组条件将其重新发布到不同的消息渠道.

Spring集成框架实现路由代码如下:

消息转换Transformation

   消息转换是转换一个数据格式到另一种的过滤器。在消息处理前可以使用各种过滤器:

 

系统管理

   下图中Control bus控制总线使用由应用程序使用的数据相同的消息传递机制,参考工作流设计,分离不同的管道进行传递消息。

 

消息模型

   区分为Publish/Subscribe 发布者/订阅者 或点对点 Point-to-Point Model,也就是1:N或1:1的模型。

存储消息

  保证一次且仅一次的消息传递,使用 透明的消息客户端。

消息的事务性

   生产者将在事务上下文中发送一个或多个消息, 生产者提交事务; 消费者收到的所有消息, 消费者提交事务。

 

SOA集成框架Spring Integration, Mule ESB or Apache Camel比较

什么时候使用Apache camel

EDA

使用Apache CXF开发Web服务

使用Spring Webservices建立SOAP服务代理