问题标签 [flow-based-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2360 浏览

javascript - BPMN 与基于流的编程

简短的问题

基于流的编程可以取代 BPMN 的功能吗?或者它们是针对不同情况的不同工具。如果是这样,例子会很棒。谢谢。


更长的故事

最近我一直在尝试用 Javascript 创建一个 BPMN 实现。在过去,我会在 Java 上使用 Camunda,现在我想尝试一些新的东西。我转向 BPMN 的原因是因为代码的逻辑会非常复杂,使用可视化表示会更容易维护和编辑。

javascript 上的 BPMN:我遇到了我想要的https://www.npmjs.com/package/bpmn,但是在运行并行门时测试似乎不是异步的。此外,每周下载次数为 26(非常低)。

流:进一步的研究揭示了基于流的编程,它允许我绘制流程图来构建一个工作应用程序。如 Node-Red、Slang、NoFlow。而且似乎也是异步的。

围绕基于流的编程的问题:对于 FBP,它似乎是异步的,并且有一个很好的逻辑图表表示并且可以维护。我调查了它,因为 FBP 的实现太多了,并且提供了一些并与 3rd 方供应商绑定(即: https ://developer.getflow.com/) ,所以我越来越困惑。其中很多都被宣传为与物联网一起使用。我是否可以将它集成为更大的应用程序的一部分,而无需任何运行时第 3 方依赖项?我可以像在 java 中使用 Camunda BPMN 一样使用它吗?

参考: 基于流的编程 https://www.quora.com/Will-visual-flowchart-programming-be-better-than-coding https://en.wikipedia.org/wiki/Flow-based_programming

0 投票
2 回答
170 浏览

webserver - Apache nifi 可以用作应用服务器吗?

我是一名应用程序开发人员,主要开发和维护企业应用程序,如ERP、HCM系统。在这个领域工作多年后,我开始觉得业务系统的开发方式不太对劲。经过数百名开发人员多年的维护和改进,系统变得越来越大,越来越复杂。到头来,根本不可能对系统做大的改动,因为逻辑都像意大利面条一样纠缠在一起。开发人员非常害怕造成严重的客户问题。

最近我发现了J. Paul Morrison发明的基于 Flow 的编程范式,我觉得它真的很有趣。我非常赞成通过视觉绘制图表来进行应用程序开发的想法。众所周知,开发业务系统首先要绘制业务流程图。为什么业务流程图不能只是系统本身?

自然地,我试图找到 FBP 的实现,而 nifi 是 FBP 发明者推荐的。我还没有深入挖掘nifi。

刚看了一些介绍视频和文档后,我发现大多数时候,nifi 专家总是在谈论使用 nifi 进行物联网系统,实时流式传输这类东西。看来nifi与业务系统无关。

期待有人能解开我的疑惑。nifi 适合构建业务交易系统吗?

0 投票
2 回答
179 浏览

multithreading - 基于流/反应式编程中的事务/请求-响应模式

因此,最近几天我一直在阅读有关基于流的编程 (FBP) 的内容,并且我还一直在阅读 J. Paul Morrison 的有关它的书。但是,我觉得我仍然无法真正理解它。一般概念是您将编程视为某种装配线,其中您的组件将一些数据包作为输入并产生一些数据包作为输出。您可以连接这些组件并通过网络传输数据包。虽然我完全了​​解这如何适用于 ETL 类型的应用程序或批处理,但我不知道如何使用它处理同步请求/响应模式或数据库事务之类的事情。

例如,假设我有一个实现为 FPB 的 Web 服务器。这个网络服务器有一个 GET /user/{id} ,它应该返回一个带有一些用户信息的 JSON。它还有一个 POST /user/{id} ,您可以在其中通过将一些 JSON 发送回服务器来更新用户。所以这就是我想象的这个流程的样子:

示例流程

我试图拥有许多可重用的组件,而不是将处理请求的整个逻辑放入单个组件中。因此,有一个 HTTP 服务器组件将请求发送到调度程序组件,然后调度程序组件将请求分派到后续流中。在每个流程中,请求由通用“请求解析器”组件解析,该组件将请求的各个部分输出到流程的其余部分。

上半部分非常简单,我从 DB 中读取具有给定 ID 的用户实体,将对象序列化为 JSON,然后将其发回。然而,此时我们实际上并没有对 HTTP 请求的引用,那么我怎么知道将这个请求发送到哪里呢?

在下部,我们有一些额外的复杂性,因为我想以事务方式写入数据库。因此,首先启动一个事务(并行地将请求主体解析为某个对象),然后从数据库中检索用户对象并与来自请求的输入合并。最后,它被写回数据库并提交事务。最后,一些“OK”状态响应调用者。在这里,我还有一个额外的问题,即在提交事务时,我真的不知道要提交哪个事务。当然,在发送响应时,我不知道将其发送到哪个请求。

所以这两个问题似乎有一些共同点——一种跨越许多组件的“上下文”。在一个示例中,它是 HTTP 请求/响应上下文,而另一个示例是事务上下文。在常规编程中,这些上下文通常在线程级别处理。由于请求在单个线程中运行,因此事务和请求上下文绑定到线程本地,因此只要所有内容都在同一个线程中运行,它们就可以在任何地方访问。

在基于流的编程中,每个组件独立运行,理想情况下在单独的线程上运行。这实际上是一个关键的事情,因为它允许并行化和有效使用多个处理器。但是,当该线程本地上下文不再存在时,您如何在基于流的编程中处理这些问题?通过正确的错误处理(我在示例中省略了),这将变得更加复杂。

我认为,当您进行反应式编程时,大部分处理都是异步和多线程的,您也会遇到同样的问题,所以我想知道是否有模式来处理这个问题。您是否有反应式编程或基于流的编程的真实生活经验,并且对我如何解决这个问题有一些提示?

0 投票
1 回答
19 浏览

javascript - Travis-CI 在提交期间给出错误

我有一个名为 JSFBP 的 JavaScript 应用程序 - https://github.com/jpaulm/jsfbp - 使用 node-fibers,它已开始给出 Travis 错误 - 截至 10 月 25 日。日志文件是https://travis-ci。 org/jpaulm/jsfbp/jobs/615992765。节点纤维的人可以看看,或者给我一个更合适的地方来问这个问题......?TIA

0 投票
1 回答
227 浏览

node-red - Node-Red 功能节点按顺序排列

嗨,我目前正在用 Node-Red 开发一个系统。因此它将接收来自 POST 的输入,并在 JS 函数节点中对其进行处理。但这就是问题的开始。因此,如果我将所有逻辑放在一个功能节点中,它将需要 100 行代码(顺便说一句,现在可以使用)。我应该只保留这个还是需要制作几个(如 2 个或 3 个)功能节点以便按顺序处理信息,还是不需要这样做?因此,与其在一个流中只有 3 个节点(接收输入、处理逻辑的功能节点和输出),我应该分离逻辑吗?(接收输入、功能节点#1、功能节点#2、功能节点#n和输出)

0 投票
1 回答
35 浏览

noflo - 错误:组件交互/ListenChange 不适用于基础

我想运行一个NoFlo应用程序。我在 json fomat 中创建了一个 noflo 组件,然后尝试使用以下命令运行它:

我收到以下错误:

NoFlo 运行时现在正在侦听 ws://192.168.43.64:3569 浏览器将拒绝从 HTTPS 页面到不安全 WebSocket 的连接 您可以使用不安全版本的 IDE,或使用 --tls-key 和 --tls-cert 启用安全 WebSocket选项 Live IDE URL:http ://app.flowhub.io/#runtime/endpoint?protocol%3Dwebsocket%26address%3Dws%3A%2F%2F192.168.43.64%3A3569%26id%3D173bb627-f1df-48cf-80da- d2b72546c08c%26secret%3Dtupiqiyoma 组件交互/ListenChange 不适用于基础 C:\Users\DELL\Desktop\my-app

有人可以帮我解决这个问题吗?(对不起,因为我是新用户,所以可以发相关的图片)