当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

通过企业服务总线构建事件驱动的体系结构

作者:Lucas Jellema,Oracle ACE 和 Oracle 融合中间件区域总监

通过一个简单的示例了解如何配置 ESB 以“发布”企业事件。

2007 年 2 月发表

    在面向服务的体系结构 (SOA) 领域,一个比较重要的概念是事件驱动的体系结构 (EDA)。与事件机制类似,例如在 JavaScript 或 4GL 环境中,可以将触发器(可执行程序代码段)与按压按钮、更改域值或者提交查询等事件相挂钩,而 EDA 指定“服务”与“业务事件”的挂钩方式。

    大多数业务事件(从下订单、请求报价到聘用新员工或提供某部分设备)触发企业内多个响应。如果进行更近一步的细化,过程步骤内的事件(例如调用服务失败、超过预定义阈值或者到达指定目标)可能还会引起过程自身之外的相关方的兴趣。

     EDA 允许您将创建或遇到事件的过程中的所有这些事件发布到一个中央事件处理主干上,从而使所有感兴趣的相关方可以从此处找到它们。产生事件的过程或服务本身无需考虑这些外部各方,否则,会给该特定过程的执行带来压力,系统之间交织过密,造成维护困难。

    在本文中,您将通过一个基于 Oracle ESB 的简单示例了解如何配置该中央主干,以消息的形式将发布的事件传递给外部各方。(如果您没有时间学习本教程,“结论”部分提供了一个链接,其指向一个包含完整 JDeveloper 应用程序的 zip 文件)。

背景

    Oracle ESB 具有使其适用于其任务的关键功能。首先,它可利用多种方法检索消息(事件通知):通过 JMS、Web 服务调用、文件系统或数据库表等等。它还可提取带有与事件相关数据的消息并对其进行转换,通常是将其转变为一种更通用、更规范的企业模型。

    ESB 还可以将一个粗粒度事件消息转换为多个细粒度消息。例如,它可以在新用户已经注册并下了第一个订单时,通过从基于 Web 的客户订单系统接收的消息创建一个新客户事件以及新订单事件。在将原始消息转换为一个或多个更规范、可能更具针对性的消息时,ESB 还可以丰富消息的内容(例如,通过添加当前日期和时间戳信息或添加从参考数据源查找的信息),多个事件用户可能会有此要求。

    最后,根据事件(消息的内容)的特性,ESB 可将内容经过扩充的已转换消息提供给多个输出通道,例如 Web 服务、JMS、数据库过程或表、文件或者电子邮件。

    (注意:BPEL 流程就是事件报告程序的一个主要示例。执行 BPEL 流程时,在几个阶段中和在一些情况下,可以发布事件,通常是以在 ESB 中调用 Web 服务的形式进行。)

有几种方法可以帮助对事件感兴趣的相关方使用来自 ESB 的消息:

  • ESB 可以将所有消息提供给 JMS 主题,并让感兴趣的相关方自己挑选获取消息以及将其转换为自定义格式的方式。
  • 可直接从 ESB、同一服务(使用来自发信方的事件并可能将其消息转换为更规范的格式)调用每一个希望知晓消息的系统。当然,这意味着 ESB 服务需要针对增加的每一个相关方进行扩展,并且可能需要包含针对各个附加方的额外转换和过滤规则。
  • ESB 提供了一个接收事件、转换和丰富消息和将该事件发布到 JMS 的服务,以及一个针对感兴趣各方的专用服务。该专用服务将直接从接收服务(耦合)接收事件消息,或从 JMS(取消耦合)读取消息、为其正在服务的相关方执行附加的定制转换,以及通过适用于消息接收方的任何方式(JMS、Web 服务调用、数据库操作)提供消息。在该示例中,添加一个新的对事件(消息)感兴趣的相关方意味着要在 ESB 中创建一个独立的、松散耦合的新服务。但是,这会引入一些特殊开销、更多的服务定义以及服务实例,并且还会在内部通过外部 JMS 主题或多或少地复制 ESB 所做的内容。

    在大多数情况下,第二种方法可能是最好的。注意,从 ESB 服务实例调用以通知感兴趣各方的目标服务可以并行调用也可以顺序调用(取适用的方式)

利用 Oracle ESB 开发 ESB 服务

    可以在 Oracle ESB(Oracle 融合中间件中 Web 服务基础架构的 ESB 组件)中按如下方式创建该方法的简单演示。

    该案例中的业务事件是聘用新员工。当新员工签订合同后,该事件将发布到 ESB。该事件消息包含姓名、年龄、性别、职务以及入职日。有多方对该事件感兴趣:

  • 新员工需要向安全部门注册,该部门将建立帐户、颁发胸牌以便员工能够进入该机构等等。
  • 财务部门需要为新员工准备多种工资单和支出报表。
  • Junior Managers Club 将邀请处于管理位置、40 岁以下的所有人参加他们的会社。为此,他们希望在聘用了符合条件的新员工时能够得到通知

使用 Oracle ESB 实现该简单的业务事件服务,如下所示:

    通过人力资源部门(为此目的调用 ESB Web 服务)发布(“即发即弃”)业务事件 NewEmployee。ESB 服务使用该事件并执行三个也执行一些转换的路由规则:

  • 调用 SendNewEmployeeFileToJuniorManagerClub 目标服务并将 CSV 文件写入目标目录
  • 调用 InformFinanceDepartmentOfNewEmployee 目标服务并将新员工记录写入财务数据库
  • 调用 NotifySecurityWebService 以传递包含新员工数据的消息。这会启动 BPEL 工作流流程,该过程在为新员工创建安全胸牌时需要手动活动。

     部署该服务时,为发布新员工事件而对 NewEmployee ESB Web 服务的任何调用都会触发两个或三个(针对 40 岁以下的新管理层员工)目标服务。该体系结构的关键是将事件发布方(人力资源部门)与事件使用方完全分离,这样添加新用户不会对该部门有任何影响。新员工事件中的更改基本上可以在 Router Service 中得到解决,无需影响事件使用方。

要开发针对该事件的 ESB 服务,您需要完成以下步骤:

  • 下载并安装 Oracle SOA 套件 10.1.3.1 或更高版本。
  • 下载并安装 Oracle JDeveloper 10.1.3.1 或更高版本。
  • 启动 SOA 套件。
  • 运行 JDeveloper。
  • 执行初始设置。

 

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页    >>  

相关内容
赞助商链接