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。如下图所示:
JMSTaskServer启动过程中业务执行顺序包括如下三步:
1. 实例化 ServerQueue
2. 实例化 ResponseQueue
3. 创建消息队列消费者,监听到ServerQueue
JMSTaskServer 处理AddTaskRequest过程
JMSTaskServer 处理AddTaskRequest过程如下图所示:
4. 监听于ServerQueue的消费者获取客户端发送的消息,消息为ObjectMessage,封装着AddTaskRequest,包括客户端发送的Task对象实例
5. 从AddTaskCommand中获取Task实例,通过JPA将Task示例添加到数据库
6. 基于ResponseQueue创建生产者,并创建AddTaskResponse Command,将JPA生成的Task ID封装于AddTaskResponse Command
客户端消息传递过程
JMSTaskClientConnector启动连接过程
JMSTaskClientConnector启动连接还是通过两个消息队列ServerQueue和ResponseQueue进行,具体如下图:
1. 实例化 ServerQueue
2. 实例化 ResponseQueue
3. 基于消息队列ServerQueue,创建消息队列生产者
JMSTaskClientConnector处理AddTaskRequest过程
JMSTaskClientConnector处理AddTaskRequest过程如下图所示:
4. JMSTaskClientConnector基于ResponseQueue创建消费者
5. JMSTaskClientConnector基于ServerQueue创建生产者,并发送消息(Task及Content对象)到ServerQueue
6. 监听于ResponseQueue的消费者,消费服务器返回的消息,并进行处理消息,将taskID设置给ResponseHandler
总结
使用JMSTaskClientConnector连接Human Task Service完成一次AddTaskRequest过程消息传递可以分为如下几步:
- 客户端JMSTaskClientConnector和服务器端JMSTaskServer分别启动连接ServerQueue和ResponseQueue
- 服务器端JMSTaskServer监听到ServerQueue,等待客户端发送的消息
- 客户端JMSTaskClientConnector监听到ResponseQueue,等待服务器端返回消息,同时发送消息(Task及Content对象)给 ServerQueue
- 服务器端从ServerQueue消费消息,使用JPA存储 Task及Content,将JPA生成的taskID作为返回消息发送到ResponseQueue
- 客户端消费返回消息(taskID),将taskID设置给ResponseHandler
转载于:https://my.oschina.net/iwuyang/blog/197163