InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

SCA增加了事件处理及Pub/Sub的扩展

作者 Boris Lublinsky 译者 胡键 发布于 2009年5月11日

领域
架构 & 设计,
企业架构,
语言 & 开发
主题
编程 ,
SOA
标签
标准化 ,
服务组件架构

SCA的新规范,事件处理和Pub/Sub的装配模型扩展规范,描述了SCA装配模型对事件处理和Pub/Sub的扩展,它们完成:

  • 事件处理,负责执行对事件的操作,包括创建、读取、转换和删除事件或事件对象/表示。事件处理组件之间的交互是通过创建要发送的事件消息完成的。此外,事件处理组件可以使用SCA的常规服务响应机制跟其他SCA组件进行交互。
  • 发布和订阅(通常简写为Pub/Sub),是一种特殊的组织事件产生组件和事件消费组件的风格,其中分离了生产组件跟消费组件之间的耦合。想要消费事件的组件是通过订阅而不是通过接口来指定它们的关注点。相同事件可被多个订阅者接收。

事件处理的引入提供了一种比使用服务接口耦合更松的组件组合方法。事件对于通信两端的组件,强制性的要求要少得多。从效果上上来看,在事件处理过程中,只有事件类型才需要在生产者和消费者之间共享。更松的耦合可以通过Pub/Sub的使用实现。在这种情况下,生产者并不直接跟任何消费者相连;相反,生产者通过一个逻辑中介(Pub/Sub引擎)跟消费者连接。

在SCA中,事件生产者能够通过一个被称为通道(channel)的第三方组件跟事件消费者链接起来,其中,在生产者中将通道配置成目标(target),而在消费者中通道则被配置成源(source)。通过设置目标属性中的目标URI列表,生产者声明了所生产消息要发往的目的地。通过设置源属性中的源URI列表,消费者声明了所接收消息的来源。

通道是SCA的一个新制品,用它可将一组事件生产者和一组事件消费者连接起来。通道可以接收由多个生产者发送的事件,也可以将所有这些事件发送给订阅该通道的每个消费者。通道的存在独立于任何生产者或消费者。通道就好像是一个名字为“in”的消费者,生产者可以向它发送事件。同时,通道又充当了一个名字为“out”的生产者,消费者可以从它接收事件。通道还能被配置成过滤器,它定义了通道希望接收的事件集合。倘若事件不符合过滤器定义的条件,该事件就会被丢弃。

通道或者存在于域(domain)级别,或者存在于作为构件(composite)使用的实现中。域级别的通道能够作为位于任意构件层级内部的生产者的目标。它们也能作为位于任意构件层级内部的消费者的源。在作为构件使用的实现内部,通道是这个构件的私有通道。这些私有通道仅能作为在同一构件内部的生产者的目标,以及同一构件内部的消费者的源。

这种对通道所进行地全局和私有划分可以让装配者视需要来控制解决方案内参与事件变化的组件集合。从效果上讲,全局通道的生产者和消费者是无法控制的——它们存在于域级别,它们随时可以通过部署动作被添加和删除。私有通道的生产者和消费者集合则是受限的——这些集合在构件容器创建时由装配者决定。

为了支持按组件去消费和生产消息,可以通过往组件定义中添加消费者和生产者标签来实现。组件元素可以有零个或多个消费者子元素,它们配置了组件的消费者。实现定义了能够配置的消费者。组件元素也可以有零个或多个生产者元素作为子元素,它们用于配置组件的生产者。能够配置的生产者同样也是由实现定义的。

SCA中的事件有一个事件类型与之关联。每个事件类型都由一个唯一的事件类型名称来定义。事件可以没有事件类型元数据与之关联——比如,有可能出现这种情况:事件是由现有非SCA事件源创建的。SCA有一个用XML描述的规范事件类型表示,以及用XML模式描述的规范事件结构(event shape)表示。SCA事件结构可以使用XML信息集进行描述,尽管它们不必非得用XML模式来描述,还有其他的类型系统可以用。SCA事件可以有一个非XML的连线格式(wire format)。事件还能用特定编程语言描述。语言特定的格式和XML之间的映射细节在SCA实现语言规范中有定义。

随着SOA和EDA的不断融合,在SCA中引入对事件的支持,巩固了其作为SOA编程模型中头把交椅的位置。

查看英文原文:SCA Extensions for Event Processing and Pub/Sub

译者 胡键 热心开源技术,《开源技术选型手册》作者,《SOA实践指南》译者。目前致力于Groovy/Grails的研究和推广。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。