内容


集成 WebSphere Business Events 和 WebSphere MQ Low Latency Messaging

Comments

简介

WebSphere MQ Low Latency Messaging(以下称为 MQ LLM)是一个 IBM 消息传递产品,在各种网络架构上提供高容量、低延迟的可靠消息传递,旨在以一种面向消息的中间件发布/订阅方式提供一种一对多的数据传递或多对多的数据交换。它也能够实现极高的消息容量和毫秒级的延迟需求的结合。MQ LLM 当前版本的设计主要为满足金融机构行政管理的消息传递需求。

在本文中,我们将向您展示如何用 WebSphere Business Events(以下称为 Business Events)来使用 MQ LLM 消息。本文的集成基于 J2EE Connector Architecture (JCA)。

更多关于 Business Events 如何与各种 IBM 产品交互操作的信息,参考 使用 WebSphere Business Events 进行业务事件处理 (developerWorks,2009 年)系列文章。该系列阐述了 Business Events 如何使用由 WebSphere Enterprise Service Bus、WebSphere Monitor、WebSphere Message Broker 和 WebSphere Process 生成的消息作为事件。

业务场景

我们来看一个股票交易的示例,使用算法交易自动输入卖出和买入订单。在这个案例中,时机、价格或订单数量是由计算机程序算法决定的。这种类型的交易就是常见的养老金或共有基金和其他形式的投资。交易行为受金融规则限制,目的是为了保护客户、识别和检举违反相关法律的市场失当行为,例如内部交易。

股票交易可使用 MQ LLM 进行自动交易,也可以添加 Business Events 事件模式功能实时识别任何投资和非法行为。这使得股票交易所在这种情况下可以迅速行动。

您应该考虑到,MQ LLM 是一个专用于高容量消息传递的产品,而 Business Events 不是专为这种场景设计的。弥补这种不足的唯一方法是在激活规范上使用消息选择器来对所有 MQ LLM 消息进行过滤,只向 Business Events 发送与识别的事件模式相关的消息。我们稍后将介绍这个选择机制。另外您可以在 MQ LLM 消息发送到事件模式之前使用 Business Events eXtreme Scale 对其进行过滤。

通过集合 MQ LLM 的高容量、低延迟消息传递功能和 Business Event 的事件模式识别功能,您可以为需要这些功能的客户端环境创建一个引人注目的解决方案。

大图片

我们来看一看,JCA 规范 中介绍的基于架构的集成方案。该规范定义了标准合同,允许一个企业应用程序和一个 MQ LLM 这样的 Enterprise Information System (EIS) 之间进行通信。关于如何实现这一功能的细节,参考 JCA 1.5,第 3 部分:Message Inflow(developerWorks,2005 年),其中介绍了如何构建和配置一个资源适配器,该资源适配器可以调用一个非 JMS 的消息驱动 bean(MDB)方法。

在本文中,我们将向 MQ LLM 案例应用这一技术。关注特定于这一信息系统的步骤。图 1 介绍了我们这个解决方案的架构:

图 1. Business Events 的 MQ LLM 适配器
Business Events 的 MQ LLM 适配器
Business Events 的 MQ LLM 适配器

我们将介绍如何构建入站 J2EE 连接器适配器,连接 MQ LLM 作为一个异步 Reliable Multicast Messaging (RMM) 接收器。接收器的配置(包括主题名)由一个使用 WebSphere 管理控制台定义的 J2C 激活规范提供。我们将向您展示如何安装和配置该应用程序,以及如何构建一个这样的应用程序。

MQ LLM 由两个协议组成:

  • 构建于 UDP、IP 以及本地 InfiniBand 之上的 RMM
  • 构建于 TCP 之上的 Reliable Unicast Messaging (RUM)

在本文中,我们只关注 RMM。

RMM 在一个标准网络架构的顶部实现不同级别的可靠性,这包括 UDP 和 IP 多播协议。RMM 也将在 InfiniBand 和共享内存之上运行,能够以多点广播(一对多)和单点广播(一对一)的模式进行操作。RMM 通过缓存发出数据和输入数据来实现较高级别的可靠性(在标准的多点广播之上)。RMM 总的内存占用和缓存大小是可配置的。

适配器调用一个在单个应用程序中的 MDB。该 MDB 负责将一个 MQ LLM 消息传送到一个 Business Events 事件消息,并将其发布到 Business Events 事件主题。在我们的场景中,MQ LLM 消息含有一个序列化的 Java 对象,它被转换成 Business Events XML 格式。

本文提供的 可下载的存档文件 含有适配器、业务应用程序、发送器和 Business Events 对象。

学习它的构建之前,我们先来看一下运行的系统。本文实现的场景集中于上述业务场景中描述的主要技术。RMM 客户端发送消息。消息中的数据用于填写一个 Business Events 事件中的字段。事件触发 Business Events 中的一些事件进程逻辑。

开始之前

您需要在您的系统上安装 MQ LLM 和 Business Events。我们将 MQ LLM 安装路径称为 <LLM>。通过将 <LLM>\lib32 目录(如果是在 32 位机上)添加到 Windows™ 中的 PATH 变量, 确保它可用于 WebSphere Application Server(以下称为 Application Server)进程。

配置激活规范

为了配置激活规范,需要完成以下步骤:

  1. 启动 Application Server 管理控制台,这是 Business Events 安装的一部分。通常,您可以通过在您的 Web 浏览器中发布以下 URL 来进行这一操作:http://localhost:9060/ibm/console。
  2. 安装适配器,在服务器上的节点范围内提供 LLMAdapter.rar file 下载。选择 Resources => Resource Adapters,接着单击 Install Rar,然后指定到 RAR 文件的路径。保存配置。
  3. 在服务器范围内通过选择 Resources => Resource Adapters => J2C Activation Spec 为 MQ LLM 适配器创建一个 MQ LLM 激活规范。选择 WebSphere MQ LLM Adapter 作为提供商,它设置消息监听器的类型,如图 2 所示。指定 jca/wbe_llmJNDI name,然后单击 OK
    图 2. 创建 J2C 激活规范
    创建 J2C 激活规范
    创建 J2C 激活规范
  4. 为激活规范设置自定义属性,这些属性稍后进行详细的介绍。例如,如图 3 所示,使用以下属性:
    • groupName = 239.255.124.1
    • topicName = topicA
    • multicastInterface = 127.0.0.1
    • label = 25

    在这个例子中,我们没有指定一个消息选择器,然而,在一个真正的应用程序中,您应该确保 Business Events 只收到其感兴趣的模式的相关事件。

    图 3. 设置自定义属性
    设置自定义属性
    设置自定义属性
  5. 安装 LLMAdapter.ear。管理控制台安装向导有 6 步。大多数界面中,您只需要接收默认设置即可,在这我们只指定非默认信息。
  6. 在安装的第 3 步中,输入激活规范的 JNDI 名称 jca/wbe_llm,如图 4 所示。
    图4. 指定激活规范的 JNDI 名称
    指定激活规范的 JNDI 名称
    指定激活规范的 JNDI 名称
  7. 在安装的第 4 步,输入 Business Events 事件主题名的 JNDI 名称,通常为 jms/eventTopic,在第 5 步中,指定 Business Events 使用的 JMS 连接工厂的 JNDI 名,通常是 jms/WbeTopicConnectionFactory

    现在,您可以安全地忽略警告(提供的连接工厂是可见的)并保存配置,然后保存对主配置的更改。

  8. 从管理控制台启动 LLMAdapter 应用程序。
  9. 下载本文提供的 Business Events 项目,然后根据 Business Events Information Center 的 将资产从 Design Data 移到产品 的描述部署它。
  10. 将资产重载入存储库,如 Business Events Information Center 主题 重载存储库 中的描述的那样。

    注意:MQ LLM Information Center 需要一个访问代码。如果您已经购买了 WebSphere MQ Low Latency Messaging V2.3,您可以请求一个访问键来查看完整的 Information Center。关于获取访问代码的操作指南在 MQ LLM Information Center 无保护简介部分可见。

  11. 通过 Start=> All programs => WBE 7.0 => Connectors 启动 Business Events 连接器。创建路径 C:\WBETests。活动将在该路径目录下生成。注意,我们这里使用的连接器仅供演示,旨在使您能够容易地理解活动的生成。在产品部署中,您可以直接用 actionTopic 阅读和处理活动。

测试客户端

要测试客户端,完成以下步骤:

  1. 将客户端导入一个基于 Eclipse 的工具。
  2. LlmRmmSender 包中为 RmmSender 类创建一个运行配置。
  3. 添加一个 PATH 环境变量到配置,指向 MQ LLM 的 lib32 目录。记住:只有当正在使用一个 32 位机时这个步骤是必需的;否则使用 lib64 目录。确保 llmJni.jar 在类路径中。
  4. 执行 RmmSender。

此外,您还可以通过添加 JAR 文件到类路径来在 Eclipse 外部运行 Java 客户端。

在 Eclipse 控制台视图中,您将看到 “Message sent” 消息,在 C:\WBETests 目录下,您将看到 Business Events 活动被作为一个独立文件生成。您可以浏览内容,看起来像这样:

<?xml version="1.1" encoding="UTF-8"?>
<connector xmlns="http://wbe.ibm.com/6.2/Action/CustomerConfirmation" name="WBE" 
    version="6.2">
<connector-bundle id="392B73408C7820220611DF0971E2F55C" name="CustomerConfirmation" 
    type="Action" workflow="FACE">
<Customer>
	<currentPrice type="Real">9.9</currentPrice>
	<lastPrice type="Real">9.9</lastPrice>
	<stock type="String">IBM</stock>
	<strikePrice type="Real">9.9</strikePrice>
	<isCall type="Boolean">true</isCall>
	<priceChange type="Real">9.9</priceChange>
	<CustomerID type="String">custID</CustomerID>
</Customer>
</connector-bundle>
</connector>

上述步骤向您展示了 Business Events 如何定制 MQ LLM 消息、以及活动如何生成。

理解组件

我们来看一下各种组件以及他们如何被部署。

MQ LLM 入站适配器

MQ LLM 入站适配器是一个异步 RMM 接收器。它在 MDB 上反序列消息和传递。我们来看一看适配器代码,特别是,元素是特定于 MQ LLM 的。

适配器存档文件包含以下类:

  • LlmActivationSpec 实现 JCA ActivationSpec 接口。它包含属性访问程序和一个验证方法。专用于 RMM 接收器的属性是 _groupName、_topicName、_label、_messageSelector、_dataPort_multicastInterface

    下面是每个 MQ LLM 的一个简短描述。更多信息见 参考资料

    • topicName:RMM 主题名。例如这个主题有点像 DEMO/WBEADAP/TEST01。
    • groupName:多播组数目。该值必须介于 224.0.0.0 和 239.255.255.255 之间。注意,一些多播地址可能是保留的。参考 Multicast Addresses 获取多播组地址分配。
    • dataPort:用于结合多播组地址的目标端口,默认是 34343。
    • multicastInterface:NIC 的地址(网络接口卡),在其中多播数据将被接收。
    • Label:如果 MQ LLM Turbo Flow (TF) 标记被使用,您可以供应一个所需的 TF 值。
    • messageSelector如果 MQ LLM 消息属性被使用,您可以指定属性名和属性值。messageSelector 属性仅用于选择 MQ LLM 生产的、对事件逻辑感兴趣的消息,其余消息被忽略。

    该激活规范的必须属性在部署描述符 ra.xml 中定义。

  • LlmResourceAdapter 实现 JCA ResourceAdapter 接口。这是一个典型的资源适配器类。惟一指定的方法是 endpointActivation,这构成了一个 LlmActiveEndpoint 类的实例。
  • LlmActiveEndpoint 实现 MQ LLM 的 RmmMessageListener 接口。
  • 构造器创建 LMM 配置对象,并设置以下属性:protocol、dataPort、socketBufferSizeKBytesm、multicastInterface。它使用 MQ LLM API 建立了一个异步接收器。
  • RmmRxConfig 结构对于创建一个 RMM 接收器实例是一组必须参数。构成这个结构的参数包含在 MQ LLM Information Center 中。

    其中包括:

    • 端口,在其中多播数据将被接收。
    • NIC 地址,在其中多播数据将被接收。
    • 是否多播能在 loopback 接口上被接收,或者是否多播传送器在接收的数据上使用相同的 NIC。
    • 接收缓存的大小。
    • 是否使用的是 IP V4 或 IP V6。
    • 如果使用高级配置文件,文件名。
  • onMessage 方法反序列消息并调用 MDB。

消息驱动 bean

MDB 使用 Apache Velocity 模板引擎将 MQ LLM 消息转变成一个 Business Events 事件。

Apache Velocity 是一个基于 Java 的模板引擎,提供一个简单但是功能强大的模板语言来查阅 Java 代码中定义的对象。它可以用于各个方面,例如,使用占位符为动态信息创建一个 HTML 页面,或者根据模板生成 Java 源代码、SQL 或 PostScript。

在我们的示例中,我们也使用它来创建表示 Business Events 事件的 XML 消息。模板包括以下内容:

<connector name="Sales" version="6.2">
  <connector-bundle name="Customer" type="Event">
    <Customer>
      <CustomerID type="String">$object.CustomerID</CustomerID>
      <strikePrice type="Real">$object.strikePrice</strikePrice>
      <stock type="String">$object.stock</stock>
      <lastPrice type="Real">$object.lastPrice</lastPrice>
      <currentPrice type="Real">$object.currentPrice</currentPrice>
      <isCall type="Boolean">$object.isCall</isCall>
      <priceChange type="Real">$object.priceChange</priceChange>
    </Customer>
  </connector-bundle>
</connector>

这些模板含有一些硬编码元素,特别是 Business Events 中的事件结构,例如,事件字段名和被传入 MQ LLM 事件填满的数据字段。这些元素在 Velocity 语法中指定,其字段前缀为 $。例如,这行

<CustomerID type="String">$object.CustomerID</CustomerID>

指出来自输入消息的 CustomerID 字段将被插入输出消息作为 CustomerID 属性的值。

注意,在本文中,Velocity 的使用并不是必不可少的。您可以使用任何库或类,简单且高效地生成 Business Events 消息。

以下是 MDB 方法:

ejbCreate 初始化 Apache Velocity 模板引擎上下文,并查看 JMS 管理对象、连接工厂和目标。

onMessage 调用模板来获取 XMLmessage 并将其发送到 Business Events 的事件主题。

注意,对象被反序列的类必须使用 MDB 包装。

Business Events 项目

一个样例 Business Events 项目在 下载 中提供。该项目含有一个样例交互集合,收到的客户端总是生成一个确认活动。事件没有特定的连接信息,这就是说,事件直接被发送到 Business Events 事件主题。

发送程序

发送程序是一个测试应用程序,在 RMM 之上发布消息。一个典型的 RMM 发送器应用程序执行以下任务:

作为初始序列的一部分,它可以:

  • 创建一个发送器实例。
  • 创建一个或多个发送器主题。

作为主应用程序逻辑的一部分,它可以:

  • 序列化应用程序对象到一个 MQ LLM 消息缓存。
  • 或者,也可将一个或多个 TF 标记应用于消息。
  • 或者,也可将一个或多个消息属性应用于消息。
  • 提交传递消息到 MQ LLM 层。

作为应用程序终止序列的一部分(或需要时),它可以:

  • 关闭已经创建的发送主题。
  • 停止发送器实例。

关于执行这些任务的特定 API 和相关 MQ LLM 结构的更多信息,参考 MQ LLM Information Center

结束语

本文中,您学习了如何集成 MQ LLM 和 Business Event。您已经学习了如何构建各种组件,看到了这些组件是如何将低延迟消息传递功能和实践模式识别功能集成到一起的。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=556090
ArticleTitle=集成 WebSphere Business Events 和 WebSphere MQ Low Latency Messaging
publish-date=10252010