ibm mq异步与同步_将IBM MQ与您的IBM Business Process Manager流程集成

本文档介绍了如何使用IBM Business Process Manager(BPM)V8.5与IBM MQ集成,用于异步和同步数据传输。通过示例展示了在BPM流程中发送和接收MQ消息的方法,包括使用Java服务、MDB和消息事件。示例代码和测试步骤帮助理解不同集成选项的优缺点。
摘要由CSDN通过智能技术生成

ibm mq异步与同步

IBM BPM V8.5是一个全面的业务流程管理平台,为管理业务流程提供了全面的可见性和洞察力。 IBM MQ是健壮的消息传递中间件,可简化并加速跨多个平台的各种应用程序和业务数据的集成。 IBM MQ促进了应用程序和系统之间有保证,安全和可靠的信息交换。 如果您需要从业务流程中向其他系统发送和接收数据,那么IBM MQ通常是自然的选择,因为它具有快速无缝连接的记录。

本教程描述了将数据从业务流程发送到IBM MQ的方法,以及从IBM MQ接收数据以驱动业务流程向前发展的方法。 这些示例逐步介绍了一个简单的用例,以描述不同的场景。 本教程假定您具有IBM BPM和IBM MQ的基本知识。 要遵循并运行教程中提供的代码示例,您需要以下软件:

  • IBM Business Process Manager Standard或Advanced V8.5.x(本教程使用IBM BPM V8.5.6,在发布时可用。)
  • IBM MQ V8.x
  • 基于Eclipse的J2EE开发环境

业务流程用例概述

本教程使用一个简单的信用卡应用程序示例业务流程来演示将IBM BPM与IBM MQ集成的各种方法。 该过程的第一步是收集客户的信息,例如社会安全号码(SSN)和客户名称。 然后,客户SSN通过IBM MQ发送到信用评分服务提供商,并且提供商通过IBM MQ将信用评分发送回业务流程。 如果信用评分低于650,则需要经理批准。 图1显示了Process Designer中的示例业务流程定义(BPD)。

图1.信用卡申请流程,IBM BPM中的示例流程
信用卡申请流程(IBM BPM中的示例流程)的屏幕截图

为了简化过程,脚本活动用于初始化客户信息。 信用检查系统服务将包含客户信息的消息发送到IBM MQ。 然后,在该流程中放置一个消息事件,以等待通过IBM MQ发送回的信用检查结果。 消息事件被附加到秘密代理以等待消息。

在IBM BPM流程中将消息发送到IBM MQ

在业务流程中,您可以通过以下三种方式将消息发送到IBM MQ:

  1. 使用teamworks.MQMessages Java™服务putMessage方法,该方法可在integration.jar文件中立即使用。 此选项是最简单的方法,但是它提供的定制非常有限。 要允许访问,您必须将IBM BPM Java进程运行所在的用户标识和IBM BPM主机都添加到IBM MQ中的服务器连接通道授权中。
  2. 如果您使用的是IBM BPM Advanced,则带有IBM MQ绑定的Advanced Integration Service(AIS)是更好的选择。 IBM MQ绑定提供了更高程度的IBM MQ连接性定制。 要使用IBM MQ绑定创建AIS服务,请参阅IBM知识中心上的IBM BPM文档中的WebSphere MQ绑定主题。
  3. 如果使用的是IBM BPM Standard,如果可立即使用的MQMessages类不能满足您的需求,请考虑使用定制Java消息服务(JMS)客户机将消息发送到IBM MQ的Java服务。 像对待任何JMS客户端一样对待自定义JMS客户端。 JMS客户端类需要打包在.jar文件中,并包含在业务流程应用程序中。 必须在JMS客户端使用的IBM BPM服务中定义IBM MQ资源。

本教程提供的样本代码说明了如何使用MQMessages类使用选项1。 参见图2。

图2. Credit Check Service图中的MQMessages类示例
信用检查服务图中的MQMessages类示例的屏幕截图

MQMessages类打包在integration.jar文件中,该文件可在System Data工具箱中立即使用。 putMessagemethod方法用于将消息放入IBM MQ。 在“属性”选项卡上,单击“ 数据映射”以配置连接到IBM MQ所需的定制,如图3所示。

图3. putMessage数据映射的示例
putMessage数据映射示例的屏幕截图

在IBM BPM流程中从IBM MQ接收消息

当业务流程需要等待IBM MQ消息继续进行流程中的下一步时,通常会在BPD中使用旨在等待消息到达的message事件来实现它。 消息事件被附加到秘密代理,该代理将消息放入IBM MQ队列时需要触发。 IBM BPM运行时环境使用内部事件管理器JMS队列来接收消息事件。

在业务流程中,您可以通过以下三种方式从IBM MQ接收消息并触发秘密代理。

  1. 您可以使用集成服务,该集成服务使用getMessage方法,该方法可在MQMessages类中立即使用。 此方法与putMessage方法具有相同的局限性,而后者可用于有限的自定义。 从IBM MQ检索消息后,可以使用Invoke UCA活动来触发附加到等待消息事件的秘密代理。
  2. 同样,如果您具有IBM BPM Advanced,则可以使用将IBM MQ绑定用于的AIS来接收IBM MQ消息。 从IBM MQ检索消息后,可以使用Invoke UCA活动来触发附加到等待消息事件的秘密代理。
  3. 您可以使用消息驱动Bean(MDB)来侦听IBM MQ队列并检索IBM MQ消息。 然后,使用JMS应用程序编程接口(API)将消息直接发送到内部JMS事件管理器队列,以触发秘密卧底代理。

本教程中的以下示例说明了选项1和3。选项2需要IBM BPM Advanced,本教程的示例中未显示。

选项1的好处是您不需要了解内部Event Manager JMS队列详细信息和消息格式详细信息。 缺点是定制选项有限,您必须手动启动或调度服务(示例中的IBM MQ Get Service)。

使用选项3的好处是MDB可以不断监视IBM MQ队列。 每当消息到达队列时,都会运行MDB。 此外,您可以使用完整的MDB和JMS API集。 缺点是需要付出额外的努力才能将消息发送到内部JMS事件管理器队列以触发秘密代理。

使用> MQMessages类和调用UCA活动

图4和图5显示了如何使用在MQMessages类中使用getMessage方法的集成服务。 从IBM MQ检索消息之后,您可以使用Invoke UCA活动来触发附加到等待消息事件的秘密代理。

图4. MQMessage类中的getMessage方法
MQMessage类中的getMessage方法的屏幕截图
图5. getMessage方法数据映射
getMessage方法的数据映射的屏幕截图

从图4和图5中可以看到,在调用MQMessages.getMessage方法之后,该消息将保存在tw.local.mqMessage返回值中,并进行解析以检索信用分数信息。 然后, 调用“调用UCA”活动以触发秘密代理。

可通过本教程下载的代码示例使用具有信用评分检查提供程序的信用卡应用程序方案。 使用此代码示例,您可以通过将消息直接以customerSSN,creditScore的逗号分隔消息格式放置到答复队列中,来模仿信用评分服务提供商。 解析消息脚本,如清单1所示。

清单1.如何解析IBM MQ消息的示例
var splittedString = tw.local.mqMessage.split(",");
tw.local.customerSSN = splittedString[0];
tw.local.creditScore = Number(splittedString[1]);

解析消息之后,便使用图6中所示的映射启动了卧底代理。

图6.卧底代理输入
卧底特工输入的屏幕截图

BPD中的消息事件附加了相同的秘密代理实现,并且customerSSN字符串用作相关密钥,如图7所示。

图7.消息事件的秘密代理数据映射
消息的秘密代理数据映射的屏幕截图

使用MDB触发秘密代理

从IBM MQ接收消息的另一种选择是使用MDB。 图8显示了使用MDB触发秘密代理的事件流程。

图8.用MDB触发秘密代理
使用MDB触发秘密卧底代理的事件流的图示

MDB在单独的J2EE应用程序中运行,该应用程序在IBM BPM服务器上运行,并充当IBM MQ与业务流程之间的桥梁。 Bean从IBM MQ接收消息,处理该消息,然后通过JMS将另一个消息发送到内部IBM BPM Event Manager队列。 该消息将触发该消息事件的秘密代理,并继续进行该过程。

秘密代理定义需要指定唯一的事件消息名称(例如, creditScoreMessage ,如图9所示)。

图9. Undercover代理定义
秘密卧底代理定义示例的屏幕截图

图10的管理控制台示例中显示了内部IBM BPM Event Manager队列的JMS资源定义示例。Event Manager队列是内部IBM BPM队列。

图10. IBM BPM Event Manager队列的JMS资源定义
IBM BPM Event Manager的JMS资源定义的屏幕截图

要将消息发送到事件管理器,请通过秘密代理将消息发送到事件管理器队列。 将消息数据封装在以eventmsg为根的预定义XML结构中,如清单2所示:

清单2.事件消息格式
<eventmsg>
  <event processApp="MQAPP" ucaname="Credit Check UCA">creditScoreMessage</event> 
  <parameters>  
	<parameter> 
           <key>customerSSN</key> 
           <value>123456789</value> 
     </parameter>
     <parameter>
           <key>creditScore</key> 
           <value>620</value>
    </parameter>
 </parameters>
</eventmsg>

有关消息结构的更多信息,请参阅IBM知识中心上的IBM BPM文档中的将消息发布到IBM Business Process Manager事件管理器

清单3显示了示例MDB代码,该代码从IBM MQ读取,处理消息,然后将其发送到事件管理器队列。

清单3.示例MDB代码
public void onMessage(Message message) {
    	try {
           TextMessage textMessage = (TextMessage) message;
           String mqMessageText = textMessage.getText();
          
           String[] splittedString = mqMessageText.split(",");
           String ssn = splittedString[0];
           String creditScore = splittedString[1];
         
	      String data="<eventmsg><event processApp=\"MQAPP\" ucaname=\"Credit Check
               UCA\">creditScoreMessage</event><parameters><parameter><key>customerSSN</key><value>" 
		 	+ ssn + "</value></parameter><parameter><key>creditScore</key><value>"  
               + creditScore + "</value></parameter></parameters></eventmsg>";
		 		 
		 System.out.println(" to send data" +"\n"+data);
		 InitialContext ctx=new InitialContext();
		 QueueConnectionFactory ucaqcf=(QueueConnectionFactory)ctx.lookup
					("javax.jms.QueueConnectionFactory");
		 Queue ucaqueue=(Queue)ctx.lookup("jms/eventqueue");
		 QueueConnection connection=ucaqcf.createQueueConnection
                        ("bpmdeadmin", "bpmdeadmin");
		 Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
           MessageProducer producer = session.createProducer(ucaqueue);
           TextMessage sendUCAMessage = session.createTextMessage();
           sendUCAMessage.setText(data);
           producer.send(sendUCAMessage);
            
           System.out.println("UCAMessage Sent");		 		 		 		 
    		} catch (Exception e) {
              e.printStackTrace();
          }
      }

运行示例代码

该示例代码包含一个业务流程.twx文件和一个.ear文件,您可以将其导入Process Designer,该文件包含MDB源代码,可以将其安装在IBM BPM的应用程序服务器上。 从本教程的“下载”部分,下载code_sample.zip文件并解压缩文件。

配置IBM MQ

该示例代码使用MyQM作为IBM MQ队列管理器名称,使用OutgoingQ作为将消息发送到IBM MQ的队列名称,使用IncomingQ作为从IBM MQ接收消息的队列。 必须在运行测试之前创建这些IBM MQ资源。 如果您使用其他名称命名,请在业务流程和MDB设置中更新配置。 以图11为例。

图11. IBM MQ配置
IBM MQ配置的屏幕截图

安装MDB应用程序

J2EE应用程序在下载部分中提供的code_sample.zip文件的.ear文件中包含MDB。 在安装文件之前,必须创建IBM MQ JMS队列资源,指向IBM MQ和应用程序服务器的MDB激活规范中定义的IncomingQ队列,如图12所示。

图12. IBM MQ JMS队列资源的IBM BPM服务器配置
IBM MQ JMS队列资源的IBM BPM服务器配置的屏幕截图

图13显示了用于将示例代码与MDB一起安装的MDB激活规范配置。

图13. MDB激活规范
MDB激活规范的屏幕截图

然后,使用图14所示的MDB设置安装.ear文件。

图14. MDB侦听器绑定
MDB侦听器绑定的屏幕截图

企业归档(EAR)应用程序已安装,但尚未启动。

测试如何将消息发送到IBM MQ

在流程设计器中,导入.twx文件,然后单击“ 启动”以启动“ 信用卡申请流程”流程的实例。 在检查器中,您可以看到消息已发送到IBM MQ,并且令牌在消息事件中等待传入的IBM MQ消息。

图15显示了业务流程中等待IBM MQ消息到达的点。

图15.等待消息事件的流程
等待消息事件的过程图

在IBM MQ资源管理器中,检查OutgoingQ队列以查看已发送的消息。

测试如何从IBM MQ接收消息

现在,您可以针对两个选项(如果使用MQMessages类和MDB)测试如何接收IBM MQ消息。

测试MQMessages Java服务选项

首先,使用IBM MQ Explorer将消息放入IncomingQ队列中,以模仿将消息放入队列中的信用评分服务提供商。 请记住,使用逗号分隔的消息格式,因此将123456789,620消息放入队列中。 在此示例中, 123456789是客户SSN, 620是信用评分。 在流程开始时,在“ Gather Customer Info脚本中设置客户SSN。 您可以更新脚本以提供不同的SSN,但随后请确保在测试时对IBM MQ使用不同的消息。

接下来,从Process Designer运行IBM MQ Get Service服务。 您可以看到流程实例的令牌已移至“批准”人工服务,因为业务规则确定如果信用分数小于650,则需要经理批准。

测试MDB选项

您需要启动一个新的BPD实例进行测试。 首先,更新“ Gather Customer Info脚本以提供不同的customerSSN ,例如987654321 。 然后,启动新的BPD实例。 流程实例在等待信用分数消息事件时等待

接下来,将一条消息作为98765432,700放入IncomingQ队列中,并且该消息等待获取MDB。 在管理控制台中,启动您先前安装的JMSUCATest应用程序。 回到Process Designer,您会看到流程实例通过流移动到了末端节点。 因为信用评分为700,所以不需要经理批准步骤。

结论

您了解了通过IBM MQ从业务流程向其他系统发送和接收消息的方式的优缺点。 在解释了将消息发送到IBM MQ的三种方式之后,下一节将逐步介绍一个使用MQMessages类将消息发送到IBM MQ的示例。 在解释了从IBM MQ接收消息的三种方式之后,本教程演示了两个示例:使用MQMessages类和Invoke UCA活动,以及使用MDB触发秘密代理。

您可以在本教程中下载的样本代码为您提供了更多机会来测试业务流程中通过IBM MQ收发消息的方式。

现在,您将在计划如何将IBM BPM与IBM MQ集成时确定最适合您的应用程序的知识。

致谢

作者要感谢Madhu Channapatna为该教程提供了宝贵的技术评论。


翻译自: https://www.ibm.com/developerworks/bpm/library/techarticles/1510_liu-trs/1510_liu.html

ibm mq异步与同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值