企业集成模式(Enterprise Integration Patterns)

系统集成的读书笔记

一、运用模式解决集成问题

  1.企业有成千上万个应用组成,途径各不相同,如何管理企业的这些资源。
  2.ERP(enterprise resource planning)企业资源计划
  3.目的:更好的处理企业的各个应用之间的资源,使用集成
  4.SOA(Service-Oriented Architecture)面向服务架构:服务和协议
  5.松耦合:传递信息的双方在传递信息时尽量减少对对方做出的假设。假设多了,虽然效率会高,但是不能适应服务的中断和变化
  6.数据包装成为消息后再传递,解决了各子应用之间的相互限制的问题
  7.集成模式:文件传输,共享数据库,异步消息传递等

二、集成方式

  1.企业集成是指让不同的应用协同工作,提供一组统一的功能
2.决策标准:应用耦合、干扰性、技术选择、数据格式、数据的时间性、数据或功能、远程通信、可靠性
3.集成方式:文件传输、共享数据库、远程过程调用、消息传递
4.使用文件传输,能够共享数据,但是缺乏时间特性,共享数据库有较好的时间特性
5.远程过程调用共享函数的方法或操作,以服务的形式共享
6.运用消息传递,可以使用可定制的格式频繁地、立即的、可靠地、异步地传输数据包

三、消息传递系统

1.管道、消息、管道和过滤器体系、路由、转换、端点
2.消息:消息首部和消息体
3.消息:JMS消息、.NET消息、SOAP消息(XML)
4.管道和过滤器:把较大的处理任务划分为一系列较小的独立处理的步骤(过滤器),这些步骤由通道连接
5.路由:存储转发。转换:把一种格式转换为另一种格式
6.应用和消息传递系统是两组单独的软件
7.消息端点把应用与消息通道连接起来,它是消息传递系统的客户,应用可以使用它发送或接收消息

四、消息传递通道

1.通道不是单向的也不是双向的,它更像是一个桶,有往桶里加入数据的应用,有消费桶中数据的应用,是多种应用协作的方式
2.通道决策:(1)一对一或一对多
           (2)确定数据类型
           (3)非法和无用消息
    (4)崩溃恢复
    (5)非消息传递客户
    (6)通信中枢
3.点对点通道:对于任何给定的消息只有一个接收者能接收。
4.发布-订购通道:消息发送给每一个接收者。采用观察者模式
5.数据类型通道:接收者根据数据类型,确定应该产生什么操作
6.可考传输:在存储转发中,一般存储在内存中,这样数据是很容易丢失的,所以消息应持久保持,增强了可靠性
7.适配器:如何把应用连接到消息传递系统,发送和接收消息,适配器可访问应用的API或数据,基于此发布消息
8.消息传递桥:把多个消息传递系统连接起来
9.消息总线:是由规范数据模型、公共命令集和消息传递基础设施组成,能让不同系统通过共享的接口集通信

五、消息构造

1.命令消息:如何把请求转换为可存储、可传递的对象。实现可靠调用。
 一般采用点对点通道发送,这样每个命令只能被消费和调用一次
2.文档消息:使用文档消息在应用之间可靠地传输数据结构,只向接收者传递数据(命令消息告诉接收者必须调用某个操作)。
3.事件消息:传递事件。
 (1)当主体需要通知事件时,它会创建一个事件对象,把这个对象封装在消息中,然后作为一个事件消息发送到通道中。
 (2)观察者接受事件消息、获取事件、并处理事件。
 (3)消息传递不会修改事件,只是传递事件。
4.请求/应答:请求通道/应答通道
 请求者接收应答的方式:同步阻塞、异步回调。
5.返回地址:请求消息中应该包含返回地址,它指出应该把应答消息发送到哪里。
6.关联标识符:每条应答消息都应该包含一个关联标示符,这是一个唯一的标示符,指示了该应答消息对应哪一个请求消息
 这样就能使请求者在接收多个应答消息时,更快速度地查找每一条请求的应答
7.消息序列:处理数据量过大时,无法在一个消息中传递。
 把一大块数据分解为消息大小的数据块,就可以将数据作为消息序列发送,并用序列表示字段编辑每个消息
 (1)一种方法是:让序列中的每个消息指示出序列的总大小
 (2)另一种方法:让每个消息都指示出它是否是序列中的最后一个消息
8.消息到期:
 在很多时候,消息到达的时间是不确定的,所以,对于接收者来讲消息在某个特定时间内没有被接收,则视为消息到期
 经常用于可靠传输,发送者发出消息后,等待应答,对于接收到的应答消息,进行时间判断,是否为消息到期
六、中场演练:简单的消息传递

1.JMS请求/应答示例---java例子,参考JMS教程
请求者:请求者定义三个队列:请求队列、应答队列、非法消息队列
        ----实现initialize()方法:
      (1)对于会话(session):
  应用中每个想要发送和接收消息的组件都必须建立各自不同的会话
  连个线程不能共享同一个会话
 (2)请求队列通过JMDI标示符查找队列
 (3)请求队列的工作:
  (1)创建一个MessageProducer,把消息发送到请求队列
  (2)创建一个MessageConsumer,从应答队列接收消息
  (3)创建一个Producer负责把消息转移到非法消息队列
        ----实现send()方法
 (1)TextMessage消息的内容
  (2)reply-to指示返回地址,告诉应答者如何返回应答消息
 (3)使用requestProducer发送消息,生产者与请求队列连接,所以会把消息发送到请求队列
----实现了receiveSync()方法
 (1)使用replyConsumer接收应答。
 (2)消息是一个TextMessage,接收应答消息
 (3)如果消息不是一个TextMessage格式,则会把它发送给非法消息队列,重发消息会改变消息ID
    应答者:指定了请求和非法消息队列,不需要指定应答队列(会由消息的返回地址提供)
    ----实现了initialize()方法
  (1)不用查找应答队列,也不用创建生成者
  (2)应答者是一个事件驱动的消费者,所以它实现了MessageListener
    ----应答者实现了初始化之后,等待请求者请求,通过reply-to把TextMessage格式的消息返回给应答队列
2.JMS实现发布-订购实例
 使用观察者模式:主体发布消息,观察者监听消息队列,并接收消息
 (1)消息传递系统管理员创建发布-订购通道(在java中,这表示为一个JMS Topic)
 (2)作为主体的应用创建一个TopicPublisher(这是一种MessageProducer),由这个发布者向通道发布消息
 (3)作为观察者的各个应用创建一个TopicSubscriber(这是一种MessageConsumer),以接收通道中的消息

猜你喜欢

转载自huiyanlihao.iteye.com/blog/1999538