【问题标题】:True Parallel Processing in jBPMjBPM 中的真正并行处理
【发布时间】:2010-01-11 21:04:56
【问题描述】:
need to achieve:


分叉处理多个任务

<fork name="customFork" >
  <transition to="task1" />
  <transition to="task2" />        
  <transition to="task3" />
       ... ... ...
  <transition to="taskN" />         
</fork>

jBPM 解决方案应该并行执行任务,而不是默认的顺序执行。

我已经阅读了建议在节点/任务上使用async="true" 的 jBPM 文档,但是不清楚应该如何准确地实现。建议之一是将其保存在 DB 中,并将任务发送到 JMS 队列,而不是处理自定义多线程管理。但是我发现 jBPM 没有一个直接的解决方案太奇怪了。

我希望有人在这里证明我错了,并向我展示使用 jBPM 3.2.6 的简单而优雅的解决方案[因为这是 Red Hat 支持的最新版本]

谢谢。

【问题讨论】:

    标签: jboss workflow jbpm


    【解决方案1】:

    您可能已经注意到,jBPM 对流程实例数据没有并发控制。例如,流程变量在访问时不能被锁定,它们也不会被引擎隐式锁定。因此,真正的并行执行会导致竞争条件。

    当涉及到 BPM 引擎时,这是一种常见的设计权衡。您可以通过每个流程实例的单个执行线程避免所有并发控制陷阱(死锁、竞争条件、饥饿、一致性问题......)。业务流程应该是长时间运行的,但也应该在大部分时间等待某些事件发生,并且它们本身不应该是计算密集型的。所以在执行单个流程实例时,CPU 绝不应该成为瓶颈。

    您可以通过将并行工作负载从您描述的流程中分离出来来解决此限制。您还可以通过创建 java 活动并手动生成线程来将其保留在进程中,尽管非常不鼓励这样做。对于初学者,您将阻塞正在执行实例的 jBPM 线程,并且您将无法监控并行化工作负载的进度。

    【讨论】:

    • 在我发布这个问题之后,我们实际上放弃了一点 jBPM。主要是因为 JBOSS 社区。如果有人刚开始选择 BPM,我会推荐 activiti.org,或者一个非常简单的方法是将 Spring Integration 与 Spring Conversational API 一起使用。 /阿纳托利
    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多