打开Windows Workflow的替代方案

Kin*_*lan 17 workflow open-source workflow-foundation

预警:还有一些类似的问题,但没有完全回答这个问题(这些问题包括:Windows Workflow Foundation的替代方案?,是否有人可以推荐.Net开源替代Windows Workflow?)

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

  1. 长时间运行的任务的持久性,以及外部事件的恢复任务
  2. 高性能,低延迟
  3. 能够开发自定义操作
  4. 能够动态指定工作流程
  5. 跟踪和追踪

我并不局限于平台或语言,我希望得到你们的一些帮助和提示,这样我就可以开始更密切地研究引擎以及你对引擎的任何经验.

保罗.

Dav*_*ins 22

我邀请你进一步检查无国籍,正如我的问题答案所建议的那样- 任何人 - 推荐 - 网络 - 开源 - 替代 - 窗口 - 工作流程.实现长时间运行状态机的目标非常简单,因为您可以将状态的当前状态存储在数据库中,并在需要时重新同步状态机.请考虑来自无状态站点的以下代码:

Stateless的设计考虑了ORM-ed域模型中的封装.一些ORM对可以存储映射数据的位置提出要求.为此,StateMachine构造函数可以接受将用于读取和写入状态值的函数参数:

var stateMachine = new StateMachine<State, Trigger>(
    () => myState.Value,
    s => myState.Value = s);
Run Code Online (Sandbox Code Playgroud)

只需很少的努力就可以坚持你的状态,然后在以后轻松检索该状态.


在动态更新工作流方面,如果配置状态机,例如

var stateMachine = new StateMachine<string, int>();
Run Code Online (Sandbox Code Playgroud)

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

  • 令我感到惊讶的是代码有多紧,以及代码有多紧.它与Workflow Foundation形成鲜明对比. (2认同)

小智 9

"Java方面":

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

http://ode.apache.org/

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

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

Shark是一个可扩展的工作流引擎框架,包括完全基于WfMC规范的标准实现,使用XPDL(没有任何专有扩展!)作为其本机工作流程定义格式,WfMC"ToolAgents"API用于服务器端执行系统活动

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

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


Tod*_*out 8

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


Jer*_*ebe 5

您可能想要查看简单状态机.

如果你觉得你想拥有的东西上更多的控制权,并希望推出自己可能会有所帮助检查出佐贺支持,项目,如NServiceBus和MassTransit使用.Sagas看起来与WF工作流程非常相似,但是POCO对象,我相信这两个项目都只使用NHibernate来实现Saga持久性.