扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
众所周知的发布/订阅交互模式(有关定义,请参见 Wikipedia)支持面向服务的体系结构的主要原则之一——松散耦合。在发布/订阅上下文中,消息或事件的发布者或生产者并不了解有关该消息或事件的任何潜在的订阅者或使用者。只有主题将发布者和订阅者联系起来;发布者发布某个主题,而订阅者则订阅该主题。底层消息传递或事件基础结构负责将主题从发布者传递到订阅者。
这对 IBM WebSphere Process Server V6(以下称为 WebSphere Process Server)和 IBM WebSphere Enterprise Service Bus V 6.0.1(以下称为 WebSphere ESB)意味着什么呢?两者都使用许多行业供应商支持的服务组件体系结构 (SCA)。有关更多信息,请参阅 developerWorks 文章服务组件体系结构。图 1 显示了 SCA 模块,该模块是 SCA 的基本组装模型。SCA 模块通过导出和导入操作与其他 SCA 模块进行通信。导出操作允许模块接收请求,而导入操作则允许模块发送请求。
将发布/订阅映射到 SCA 环境在逻辑上会产生诸如图 2 之类的结果。发布者可以通过导入操作来利用具有发布/订阅功能的通信基础结构,而订阅者则可以通过导出操作来利用相同的通信基础结构。关键的一点是,用于实现发布/订阅交互模式的是通信基础结构,而不是 SCA 环境、发布者或订阅者。
WebSphere Process Server 和 WebSphere ESB 使用 SCA 环境,该环境支持多个绑定以便在服务之间进行交互。最常用的绑定是 Web 服务绑定(通过 HTTP 或 JMS),但遵循 JAX-RPC 的 Web 服务绑定通常不支持发布/订阅交互模式,甚至通过 JMS 也不能支持该模式。同样地,SCA 绑定通常也不支持发布/订阅交互模式。JMS 绑定可以支持发布/订阅交互模式,因为 JMS 1.1 要求 JMS 提供程序支持发布/订阅功能(请参阅 Java Message Service 1.1 规范)。
|
本文描述使用 JMS 绑定并将 WebSphere Application Server 缺省消息传递提供程序用作 JMS 提供程序来创建发布/订阅交互模式的基本技术。WebSphere Application Server Version 6(以下称为 WebSphere Application Server)或其他版本中的缺省消息传递提供程序支持 JMS API 的所有工具。具体说来,它为点到点交互提供队列,并为发布/订阅交互提供主题空间。图 3 显示了本文附带的发布/订阅应用程序。发布者模块使用带有 JMS 绑定的导出操作将请求发布到任何订阅者。JMS 绑定将该请求传递到缺省消息提供程序主题空间。两个订阅者(Subscriber1 和 Subscriber2)从主题空间接收该请求。
本文假定您使用的是 WebSphere ESB V6.0.1 或更高版本。还假定您熟悉 IBM WebSphere Integration Developer v. 6.0.1(以下称为 WebSphere Integration Developer)或更高版本的使用,以帮助进行附带的示例中的 SCA 模块的构造和测试。
|
设置发布/订阅基础结构
在创建发布者和订阅者模块之前,您需要设置 JMS 基础结构。第一步是创建 WebSphere Application Server 缺省消息传递提供程序主题空间,如图 3 所示。第二步是创建所需的 JMS 构件:JMS 连接工厂、JMS 主题和 JMS 激活规范。有关详细信息,请参阅 在服务集成总线中部署发布/订阅应用程序。
要创建主题空间,请完成下列步骤。WebSphere Application Server 必须正在运行,以便可以使用管理控制台。
SCA.APPLICATION.widCell.Bus
。该总线管理应用程序特定的队列和主题空间;然而,您可以为应用程序特定目的创建独立的总线。
TheTopic
作为 Identifier,然后单击 Next。
要使 SCA 模块能够使用您通过 JMS 绑定创建的主题空间,您需要创建所需的 JMS 构件:JMS 连接工厂、JMS 主题和 JMS 激活规范。
TheCF
jms/TheCF
SCA.APPLICATION.widCell.Bus
TheTopic
jms/TheTopic
TheTopic
SCA.APPLICATION.widCell.Bus
TheTAS
jms/TheTAS
Topic
jms/TheTopic
SCA.APPLICATION.widCell.Bus
|
创建业务逻辑发布者
现在,您可以创建发布者 SCA 模块(如图 3 所示)。在此示例中,发布者模块模拟业务逻辑,该业务逻辑必须理解该发布者模块为发布者。鉴于此,您必须在开发时选择绑定。
要创建发布者 SCA 模块,请先创建包含业务对象的库以及发布者和订阅者将会使用的界面。要完成此任务,请执行以下步骤:
PubSubLib
作为 Name,然后单击 Finish。
Order
并单击 Finish。
string
类型添加 name
和 item
属性。应如图 8 所示显示 Order 业务对象。 Orders
并单击 Finish。
send
。该操作必须是单向的,以允许创建发布/订阅绑定。
order
且其类型设置为上面创建的 Order 业务对象。新界面应该如图 9 所示: Publisher
并单击 Finish。
Publish
。
jms/TheCF
作为连接工厂的 JNDI Lookup Name,如图 11 所示: jms/TheTopic
作为主题的 JNDI Lookup Name,如图 12 所示: 图 13 所示的发布者现在已经完成。将 Publisher 部署到 WebSphere Integration Developer 测试环境服务器。您实际上并不需要任何真正的业务组件以驱动导入,因为 WebSphere Integration Developer 的模块测试功能将模拟业务组件。
|
创建业务逻辑订阅者
接下来,创建订阅者 SCA 模块(类似于图 3 中所示的模块)。在此示例中,订阅者模块模拟业务逻辑,该业务逻辑必须理解该订阅者模块为订阅者。这样做的原因是,对于当前产品,您必须在开发时选择绑定。
Subscriber1
并单击 Finish。
Subscribe1
。
jms/TheTAS
作为激活规范的 JNDI Lookup Name,如图 15 所示: jms/TheTopic
作为主题的 JNDI Lookup Name,如图 16 所示。 public void send(DataObject order) { //TODO Needs to be implemented. System.out.println("Got to Subscriber1"); } |
为另一个名为 Subscriber2 的订阅者重复上面的 Subscriber1 的说明,然后部署 Subscriber2。
|
测试业务解决方案
由于 Publisher、Subscriber1 和 Subscriber2 模块已部署到测试服务器,因此,您现在可以进行测试。
|
创建集成逻辑发布者
如果您不想让业务逻辑知道该集成逻辑发布者正在使用发布/订阅交互模式,您该怎么做呢?或者,更重要的也许是,如果您具有一个现有的业务逻辑,尽管该业务逻辑当前使用点到点交互模式来实现,但您想将该业务逻辑作为发布者,您该怎么做呢?一个解决方案是使用 WebSphere ESB 来实现发布/订阅交互模式。
图 19 显示您可以使用 WebSphere ESB 执行哪些操作。发布者中介通过接受请求并使用上述技术将该请求发布到任何订阅者来协调使用单向操作(使用点到点交互模式)的请求者。在本例中,请求者和发布者之间的绑定并不一定要具有发布/订阅功能。该绑定可以是任意不支持发布/订阅交互模式的绑定:SCA、Web 服务或 JMS(通过队列而不是主题空间)。
要在 WebSphere Integration Developer 中创建中介模块(有关更多信息,请参阅 WebSphere Enterprise Service Bus 与 WebSphere Integration Developer 入门),请执行下列操作:
MedPublisher
并单击 Next。
PubOrders
。
MedPublisher 现在已经完成。您可以将 MedPublisher 部署到测试环境服务器。
现在,您必须执行一些额外设置,才能创建表示图 19 中的现有请求者的业务模块。
现在创建表示图 19 中的请求者的业务模块。请按照上面的说明使用名为 Orders
的导入创建名为 Requester 的业务模块。此示例假设现有请求者使用 Web 服务绑定。
现在,您可以将该请求者部署到测试环境服务器。如果您使用与测试原始发布者模块相同的方式测试请求者模块,您将看到 Subscriber1 和 Subscriber2 都收到了由请求者发送的消息。当然,在本例中,请求者将请求发送到 MedPublisher,而 MedPublisher 又通过导入将该请求放置在主题空间上,然后,缺省消息传递提供程序通信基础结构将该请求传递给两个订阅者。
|
关于发布/订阅交互模式的其他一些思考
再次检查图 19。从该图中我们可以看出,有另外两点需要讨论:
在这种情况下,发布者中介需要一个显式的订阅者列表并且必须主动地将请求发送到每个订阅者。这种交互模式有时被称为接收者列表。SCA 和 WebSphere ESB 当前都不具有对接收者列表交互模式的预置支持。您可以构造一组自定义中介基元(请参阅为 WebSphere Enterprise Service Bus 开发自定义中介)以供 WebSphere ESB 实现该模式,不过该内容不在本文的讨论范围之内。
|
结束语
本文讨论了与发布/订阅交互模式相关的 WebSphere Process Server 和 WebSphere ESB 的一些功能(和局限性)。文中还说明了如何在各种体系结构模式中实现该模式。您现在应该能够在基于 WebSphere 产品系列构建的面向服务的解决方案中利用发布/订阅交互模式了。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者