JBoss 系列六十二:深入理解 jBPM Human Task - II(使用JMS做传输媒介执行Human Task)

 概述

本文是继深入理解 jBPM Human Task - I,对使用JMS做传输类型过程中服务器端和客户端业务逻辑的明细。本文也是基于之前代码分析系列:

  • 服务器端代码 - jBPM Human Task 源代码分析 - I
  • 客户端代码 - jBPM Human Task 源代码分析 - II
本问主要包括:
  • JMSTaskServer 启动过程
  • JMSTaskServer 处理AddTaskRequest过程
  • JMSTaskClientConnector启动连接过程
  • JMSTaskClientConnector处理AddTaskRequest过程

服务器端消息传递过程

JMSTaskServer 启动过程

JMSTaskServer 端主要包括两个消息队列ServerQueue和ResponseQueue,这两个队列负责与客户端进行交互,创建,修改Human Task。如下图所示:

JBoss 系列六十二:深入理解 jBPM Human Task - II(使用JMS做传输媒介执行Human Task)_第1张图片

JMSTaskServer启动过程中业务执行顺序包括如下三步:

1. 实例化 ServerQueue

2. 实例化 ResponseQueue

3. 创建消息队列消费者,监听到ServerQueue

JMSTaskServer 处理AddTaskRequest过程

JMSTaskServer 处理AddTaskRequest过程如下图所示:

JBoss 系列六十二:深入理解 jBPM Human Task - II(使用JMS做传输媒介执行Human Task)_第2张图片

4. 监听于ServerQueue的消费者获取客户端发送的消息,消息为ObjectMessage,封装着AddTaskRequest,包括客户端发送的Task对象实例

5. 从AddTaskCommand中获取Task实例,通过JPA将Task示例添加到数据库

6. 基于ResponseQueue创建生产者,并创建AddTaskResponse Command,将JPA生成的Task ID封装于AddTaskResponse Command

客户端消息传递过程

JMSTaskClientConnector启动连接过程

JMSTaskClientConnector启动连接还是通过两个消息队列ServerQueue和ResponseQueue进行,具体如下图:

JBoss 系列六十二:深入理解 jBPM Human Task - II(使用JMS做传输媒介执行Human Task)_第3张图片

1. 实例化 ServerQueue

2. 实例化 ResponseQueue

3. 基于消息队列ServerQueue,创建消息队列生产者

JMSTaskClientConnector处理AddTaskRequest过程

JMSTaskClientConnector处理AddTaskRequest过程如下图所示:

JBoss 系列六十二:深入理解 jBPM Human Task - II(使用JMS做传输媒介执行Human Task)_第4张图片

4. JMSTaskClientConnector基于ResponseQueue创建消费者

5. JMSTaskClientConnector基于ServerQueue创建生产者,并发送消息(Task及Content对象)到ServerQueue

6. 监听于ResponseQueue的消费者,消费服务器返回的消息,并进行处理消息,将taskID设置给ResponseHandler

总结

使用JMSTaskClientConnector连接Human Task Service完成一次AddTaskRequest过程消息传递可以分为如下几步:

  1. 客户端JMSTaskClientConnector和服务器端JMSTaskServer分别启动连接ServerQueue和ResponseQueue
  2. 服务器端JMSTaskServer监听到ServerQueue,等待客户端发送的消息
  3. 客户端JMSTaskClientConnector监听到ResponseQueue,等待服务器端返回消息,同时发送消息(Task及Content对象)给 ServerQueue
  4. 服务器端从ServerQueue消费消息,使用JPA存储 Task及Content,将JPA生成的taskID作为返回消息发送到ResponseQueue
  5. 客户端消费返回消息(taskID),将taskID设置给ResponseHandler

你可能感兴趣的:(jboss,jbpm,jbpm,task,BPM,human)