【问题标题】:Open alternatives to Windows Workflow打开 Windows 工作流的替代方案
【发布时间】:2009-07-02 16:48:02
【问题描述】:

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

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

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

我不受平台或语言的限制,我希望得到你们的一些帮助和提示,以便我可以开始更仔细地研究引擎以及您对引擎的任何经验。

保罗。

【问题讨论】:

  • 其他问题在哪些方面没有回答您的问题?
  • 我没有将我的问题与 Windows Workflow 或 .Net 联系起来,这就是为什么我认为他们没有回答我的问题。它不是其他问题的重复。我需要找到一组状态机/工作流服务,无论平台是什么“开放”的。

标签: open-source workflow workflow-foundation


【解决方案1】:

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

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

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

只需很少的努力,您就可以持久化您的状态,然后在以后轻松地检索该状态。


关于动态更新工作流,如果你配置一个状态机比如

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

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

【讨论】:

  • 我很惊讶代码的紧凑性和功能性。它与 Workflow Foundation 形成鲜明对比。
  • 我现在实际上正在使用无状态,因为它很简单——虽然我没有将它标记为答案(另一个问题提供了一个很好的替代方案列表),但我鼓励大家也标记它给大卫更多的代表谢谢。
【解决方案2】:

“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/ 我这会帮助你:-)

【讨论】:

  • @Kinlan - 我很好奇你的无状态原型。它有什么缺点?
  • @David - 如果你想要控制(我这样做)和速度,那么 Stateless 似乎是一个理想的解决方案 - 它没有太多,从你学到的理论角度来看,它几乎可以做所有事情关于状态机,只要您对编写自己的持久性和创建逻辑感到满意,这似乎是一个非常强大的解决方案。我想他们可能是某些人的缺点......我还没有找到任何其他东西可以真正说“伙计......我希望它确实 xyz”,如果我真的可以的话,我至少可以编写代码来做到这一点需要一个功能。
  • @David,我发现的一件事是 OnEnter 事件没有在启动状态下触发,但我不知道这是正确还是错误 :)
【解决方案3】:

您可以考虑将流程实现为实际的状态机。像State Machine CompilerRagel 这样的工具可以帮助解决这个问题。在许多情况下,状态机正是您实现可测试且坚如磐石的极其复杂的行为所需要的。我并不声称自己是 Windows 工作流专家,但据我所见,我质疑它优于手动或使用工具编写自己的状态机。

【讨论】:

  • @Todd - 我赞同你对 WWF 的看法。将数据输入和输出工作流非常复杂,需要多个项目来支持接口和数据交换。我放弃了使用简单的状态机,我可以完全控制它。
【解决方案4】:

您可能想查看Simple State Machine

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

【讨论】:

  • 我也在研究 Rhino Queueues(不是用于状态机 - 而是用于将数据排队进出机器)但无法让它工作。
【解决方案5】:

我会建议你花几个小时看书Open-Source ESBs in Action。 “编排”和“编排”是处理“企业服务总线”时要关注的关键词。 .NET 的系统相当昂贵(BizTalk 的价格在一辆像样的汽车的价格范围内,Tibco 的价格在一个像样的房子的价格范围内)。

其他链接:

Open ESB project

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

【讨论】:

    【解决方案6】:

    试用 Drools for JAVA,我个人从未尝试过,但我知道有几个商业应用程序是基于 drools 的。

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

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

    祝你好运

    【讨论】:

      【解决方案7】:

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-30
            相关资源
            最近更新 更多