IBM SPSS Collaboration and Deployment Services 是一个企业级应用程序,它允许部署和使用预测分析。客户端应用程序使用 IBM SPSS Collaboration and Deployment Services 中提供的 Web 服务来访问分析资产。通过使用 SPSS Scoring Service,客户端应用程序可以采用从 IBM SPSS Modeler 中开发的预测模型得到的实时分数。
通常 SPSS Scoring Service 使用基于 HTTP 或 REST 的 SOAP(也就是说,使用 HTTP 上的 JavaScript Object Notation (JSON))来访问。这些两种机制实际上是同步的。有时为了性能和技术需要,您可能希望采用与 SPSS Scoring Service 的异步、非阻塞性集成。在这种情况下,基于 SOAP over JMS 的集成很有帮助。本教程将展示如何与 SPSS Scoring Service 实现基于 SOAP over JMS 的集成。文中还提供了 SPSS 和 IBM Integration Bus 的配置细节。
在本教程中,SPSS Scoring Service 是在一个 IBM WebSphere® Application Server 环境中的 SPSS Collaboration and Deployment Services 上部署和运行的。
回页首
IBM SPSS Collaboration and Deployment Services 预定义了供 Collaboration and Deployment Services 自身访问的 JMS 资源。要让外部 JMS 客户端也能访问这些 JMS 资源,需要执行以下配置:
图 1. RMI/IIOP 安全性
点击查看大图
关闭 [x]
spss.ibm.com
)可以从 IBM Integration Bus 服务器进行访问。在您的环境中,如果 IBM Integration Bus 服务器对 SPSS 而言是远程的,主机名 localhost
将不起作用。您可能需要将它替换为 SPSS 服务器的实际主机名。出于这个原因,我们指定了实际主机名,如图 2 所示。 图 2. 服务器端口配置
点击查看大图
关闭 [x]
<Bus_Member_Host_Name>:<SIB-Endpoint-Address-Port>:BootstrapBasicMessaging
更新连接工厂的端点。 对于 <SIB-Endpoint-Address-Port>
,查看服务器端口配置(图 2)。在示例中(如图 3 所示),我们输入了 spss.ibm.com:7277:BootstrapBasicMessaging
。
图 3. 队列连接工厂
点击查看大图
关闭 [x]
使用一个响应队列作为 SPSS Scoring Service 的回复队列。要创建一个队列和它的 JNDI 定义:
图 4. 服务总线中的响应队列
点击查看大图
关闭 [x]
queue/SPSSResponse
。 图 5. 响应队列的 JNDI 定义
点击查看大图
关闭 [x]
回页首
IBM Integration Bus 提供了 JMS 节点,以便与任何兼容 JMS 的应用服务器进行 JMS 通信。要配置 IBM Integration Bus 来访问 Collaboration and Deployment Services 的 JMS 引擎:
c:/WebSphere_WAS_Client
。然后,从 WebSphere Application Server 中的 /runtimes 目录复制以下两个 JAR 文件,将它们粘贴到您刚创建的目录: IIB9B
是集成节点的名称: 点击查看代码清单
关闭 [x]
mqsichangeproperties IIB9B -c JMSProviders -o WebSphere_WAS_Client -n jarsURL -v c:/WebSphere_WAS_Client
回页首
在非阻塞集成模式中,IBM Integration Bus 的请求处理流将请求发送到 SPSS Scoring Service。处理流不会等待返回响应。SPSS Scoring Service 将响应返回到预先确定的目标。要实现非阻塞集成,可以定义单独的请求和响应处理流。
为了演示该集成,图 6 显示了请求流。出于简单性,在本教程中,评分 SOAP 请求由 HTTP 上的一个客户端发送。使用 JMSOutput 节点将 SOAP 信封请求消息发送到 SPSS Collaboration and Deployment Services 服务器上的 JMS 队列。
图 6. 请求流
图 7 显示了在 JMSOutput 节点上设置的属性。 Destination queue 字段设置为 queue/PASWScoring
,它是 Collaboration and Deployment Services 的默认请求队列。 Reply to destination 字段被设置为 queue/SPSSResponse
,它已在定义一个响应队列端点中的第 2 步中创建。在 JMS Connection 选项卡上, Connection factory name 被设置为 ConnectionFactory
。
图 7. JMSOutput 节点属性
您必须临时存储 HTTP Session Identifier。在处理响应流中的 SPSS 响应消息时,需要使用这个 ID 来抓取相关的 HTTP 会话。一个简单的扩展 SQL (ESQL) 节点 Create_MQMD_Identifiers 准备了一条 0 字节 MQ 消息。它将 JMSOutput 节点返回的 JMSMessageId 设置为 MQ Correlation ID,将 HTTP Session Identifier 设置为 MQ 消息 ID(参见清单 1 了解 ESQL 内容)。MQPUT 节点将这个 MQ 消息保存到 SESSION_STORE 队列。
清单 1. 存储 HTTP Session Identifier 的 ESQL
点击查看代码清单
关闭 [x]
CREATE COMPUTE MODULE InvokeSPSSScoring_Non_Blocking_Create_MQMD_Identifiers CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN SET OutputRoot.MQMD.CorrelId=CAST ( SUBSTRING(InputLocalEnvironment.WrittenDestination.JMS.DestinationData.JMSMessageID AFTER 'ID:') AS BLOB); SET OutputRoot.MQMD.MsgId=CAST (Environment.Variables.HTTP.RequestIdentifier AS BLOB); RETURN TRUE; END; END MODULE;
响应流从 JMS 队列 queue/SPSSResponse 中读取 SPSS 评分响应。SPSS Scoring Service 将请求消息的 JMSMessageID 设置为响应消息的 JMSCorrelationID,这允许您将请求与回复消息相关联。使用 JMS MQ Transform 节点将 JMSCorrelationID 转换为 MQ 关联 ID。如图 8 所示,使用了一个具有 Get by correlation ID 属性的 MQGET 节点从 SESSION_STORE 队列中检索 MQ 消息。
图 8. 响应流
抓取的 MQ 消息的 MessageID 被设置为 HTTP Request Identifier(参见清单 2)。另外,SPSS 响应正文发送到 HTTP Reply 节点,它使得 HTTP Reply 节点能够将响应发送回起源客户端。
清单 2. 还原 HTTP 会话标识符的 ESQL
CREATE COMPUTE MODULE InvokeSPSSScoring_Non_Blocking_Response CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN SET OutputRoot.XMLNSC=InputRoot.XMLNSC; SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier=InputRoot.MQMD.MsgId; RETURN TRUE; END; END MODULE;
回页首
要触发请求流,可以使用任何工具(比如 Firefox HttpRequester 或 SoapUI)将 SOAP 请求提交到 IBM Integration Bus。在这里,我们使用了 SoapUI 来发起请求。图 9 显示了 SoapUI 客户端收到的成功响应。
图 9. SPSS Scoring Service 的成功调用
点击查看大图
关闭 [x]
回页首
在本教程中,您学习了如何实现了一个 IBM Integration Bus 流,使用 JMS 以一种非阻塞方法调用 IBM SPSS Scoring Service。您还学习了 SPSS、IBM Integration Bus JMS 配置。还学习了如何使用 JMS 消息标识符来在请求和回复消息之间建立关联。
回页首