打开Windows Workflow的替代方案

时间:2009-07-02 16:48:02

标签: open-source workflow workflow-foundation

预警:还有一些类似的问题,但没有完全回答这些问题(包括:Alternatives to Windows Workflow Foundation?Can anyone recommend a .Net open source alternative to Windows Workflow?

我们正在开发一个基于事件的状态机系统,目前我们正在调查Windows工作流程,我们的系统需要在响应来自众多来源的事件时的低延迟(xmpp,http,sms,电话,电子邮件等进入系统,可扩展和弹性,最重要的是可定制。由于各种原因(以及尽职调查),我正在寻找支持类似于Windows Workflow Foundation(以及更多 - 如果可能的话)的功能的开放式工作流引擎,主要是(但如果有引擎没有那么多并不重要)支持一些功能):

  1. 长时间运行任务的持久性以及外部事件的恢复任务
  2. 高性能,低延迟
  3. 开发自定义操作的能力
  4. 动态指定工作流程的能力
  5. 跟踪和追踪
  6. 我并不局限于平台或语言,我希望得到你们的一些帮助和提示,这样我就可以开始更密切地研究引擎以及你对引擎的任何经验。

    保罗。

9 个答案:

答案 0 :(得分:20)

我邀请您进一步检查Stateless,正如我的问题can-anyone-recommend-a-net-open-source-alternative-to-windows-workflow的回答中所建议的那样。实现长时间运行状态机的目标非常简单,因为您可以将状态的当前状态存储在数据库中,并在需要时重新同步状态机。请考虑来自无状态站点的以下代码:

  

无国籍的设计与   封装在ORM-ed域中   记住模型。一些ORM放置   对映射数据的要求   可以存储。为此,   StateMachine构造函数可以接受   将使用的函数参数   读取和写入状态值:

var stateMachine = new StateMachine<State, Trigger>(
    () => myState.Value,
    s => myState.Value = s);

只需很少的努力就可以坚持你的状态,然后在以后轻松找回那个状态。


关于动态更新工作流,如果配置状态机,例如

var stateMachine = new StateMachine<string, int>();

并在XML中维护一个单独的状态和触发器文件,您可以通过循环遍历字符串int值对在运行时执行配置。

答案 1 :(得分:9)

“Java方面”:

Apache ODE(Orchestration Director Engine)执行遵循WS-BPEL标准编写的业务流程。它与Web服务,发送和接收消息,处理数据操作和错误恢复进行对话,如流程定义所述。它支持长期和短期生活流程执行,以协调您应用程序中的所有服务。

http://ode.apache.org/

OSWorkflow可被视为“低级”工作流实施。必须在OSWorkflow中“编码”可能由其他工作流系统中的图形图标表示的“循环”和“条件”等情况。

http://www.opensymphony.com/osworkflow/

鲨鱼是包括作为工作流处理定义格式完全基于使用XPDL WfMC规范(没有任何专有扩展!)的标准实现和工作流管理联盟“ToolAgents” API用于系统应用工作的

http://www.enhydra.org/workflow/shark/index.html

Python方面: http://bika.sourceforge.net/ http://www.vivtek.com/wftk/ 我会帮助你: - )

答案 2 :(得分:7)

您可以考虑将您的流实现为实际的状态机。 State Machine CompilerRagel等工具可以为您提供帮助。在许多情况下,状态机正是您实现可测试且坚如磐石的疯狂复杂行为所需要的。我并不认为自己是Windows工作流程专家,但从我所看到的情况来看,我质疑其优于编码自己的状态机,无论是手工还是使用工具。

答案 3 :(得分:5)

您可能需要查看Simple State Machine

如果您希望对事物拥有更多控制权并想要自己动手,那么查看像NServiceBus和MassTransit这样的项目使用的Saga支持可能会有所帮助。 Sagas看起来与WF工作流非常相似,但是POCO对象,我相信这两个项目都只使用NHibernate来实现Saga持久性。

答案 4 :(得分:3)

尝试使用Drools for JAVA,我个人从来没有尝试过,但我知道有几个商业应用是基于drools。

http://www.jboss.org/drools/

您还可以升级到.NET 4.0,新框架中的工作流程有了重大改进。我知道如果我正在编写一个新的工作流应用程序,我会跳到4.0。

祝你好运

答案 5 :(得分:3)

我建议你花几个小时看一下这本书Open-Source ESBs in Action。 “协调”和“编排”是处理“企业服务总线”时的关键流行语。用于.NET的系统非常昂贵(BizTalk在一辆体面的汽车的价格范围内,Tibco的价格在一个像样的房子的价格范围内)。

其他链接:

Open ESB project

Comparison of OpenESB and ServiceMix(两者都是上面“行动”一书的主题。

答案 6 :(得分:2)

答案 7 :(得分:0)

考虑Workflow Engine,一个轻量级的一体化组件,使您能够将任何复杂的自定义可执行工作流添加到任何.NET或Java软件,无论是您自己的创建还是第三方解决方案,对现有代码的最小更改。它支持自定义操作和命令,具有计时器并支持并行工作流。还有一个免费版本。

答案 8 :(得分:0)

您可以查看Imixs-Workflow,这是基于bpmn 2.0的状态机的事件驱动方法。它特别关注以人为中心的长期任务。