From 1ce81831da220853c01eefdd788ea30d71fb7b2d Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 14:26:31 +0800
Subject: [PATCH 01/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0pom=E4=BE=9D=E8=B5=96?=
=?UTF-8?q?=EF=BC=8C=E5=8E=BB=E9=99=A4dubbo+nacos=EF=BC=8C=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0openfeign?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
flow-eda-common/pom.xml | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/flow-eda-common/pom.xml b/flow-eda-common/pom.xml
index df5a25eb..a4061aac 100644
--- a/flow-eda-common/pom.xml
+++ b/flow-eda-common/pom.xml
@@ -33,14 +33,9 @@
4.5.1
- org.apache.dubbo
- dubbo-registry-nacos
- 3.0.7
-
-
- org.apache.dubbo
- dubbo-spring-boot-starter
- 3.0.7
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ 3.1.1
org.springframework.boot
From 6c89ddc689aa61d679d3acaa4517bc515737b4d0 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 14:28:15 +0800
Subject: [PATCH 02/28] =?UTF-8?q?=E5=8E=BB=E9=99=A4dubbo=E5=92=8Cnacos?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../flow/eda/logger/FlowEdaLoggerApplication.java | 5 -----
flow-eda-logger/src/main/resources/application.yaml | 13 -------------
2 files changed, 18 deletions(-)
diff --git a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
index 80684f96..7419af46 100644
--- a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
+++ b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
@@ -1,15 +1,10 @@
package com.flow.eda.logger;
-import com.flow.eda.logger.logs.LogsServiceImpl;
-import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
-import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-@EnableDubbo
-@DubboComponentScan(basePackageClasses = LogsServiceImpl.class)
@SpringBootApplication
public class FlowEdaLoggerApplication {
diff --git a/flow-eda-logger/src/main/resources/application.yaml b/flow-eda-logger/src/main/resources/application.yaml
index 83c60be8..a604aad6 100644
--- a/flow-eda-logger/src/main/resources/application.yaml
+++ b/flow-eda-logger/src/main/resources/application.yaml
@@ -8,19 +8,6 @@ spring:
port: 5672
username: guest
password: guest
-dubbo:
- application:
- name: flow-eda-logger
- qos-enable: false
- qos-accept-foreign-ip: false
- registry:
- protocol: dubbo
- address: nacos://localhost:8848
- username: nacos
- password: nacos
- protocol:
- name: dubbo
- port: 20883
logging:
level:
com.alibaba.nacos.common.remote.client: warn
From 14d49d12831c95e3da124abc5e5b8658b5ba4d8b Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 14:29:08 +0800
Subject: [PATCH 03/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...gsServiceImpl.java => LogsController.java} | 44 ++++++++++++++-----
1 file changed, 32 insertions(+), 12 deletions(-)
rename flow-eda-logger/src/main/java/com/flow/eda/logger/logs/{LogsServiceImpl.java => LogsController.java} (70%)
diff --git a/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsServiceImpl.java b/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java
similarity index 70%
rename from flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsServiceImpl.java
rename to flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java
index e86326d0..08bb7eef 100644
--- a/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsServiceImpl.java
+++ b/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java
@@ -1,33 +1,45 @@
package com.flow.eda.logger.logs;
-import com.flow.eda.common.dubbo.api.LogsService;
import com.flow.eda.common.dubbo.model.Logs;
+import com.flow.eda.common.http.Result;
import lombok.extern.slf4j.Slf4j;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
+/** 日志服务接口 */
@Slf4j
-@Service
-@DubboService(interfaceClass = LogsService.class)
-public class LogsServiceImpl implements LogsService {
+@RestController
+@RequestMapping("/api/v1/feign")
+public class LogsController {
private static final String ROOT = System.getProperty("user.dir");
- @Override
- public List getLogList(Type type) {
+ /**
+ * 获取日志信息列表
+ *
+ * @param type 日志类型
+ * @return 日志信息列表
+ */
+ @GetMapping("/logs")
+ public Result> getLogList(@RequestParam Type type) {
if (Type.OPERATION == type) {
- return getOperationLogs();
+ return Result.of(getOperationLogs());
} else {
- return getRunningLogs();
+ return Result.of(getRunningLogs());
}
}
- @Override
- public void deleteLogFiles(List path) {
+ /**
+ * 删除日志文件
+ *
+ * @param path 日志文件路径
+ */
+ @DeleteMapping("/logs")
+ public Result deleteLogs(@RequestBody List path) {
path.forEach(this::deleteLogFile);
+ return Result.ok();
}
/** 获取操作日志信息列表 */
@@ -81,4 +93,12 @@ private void deleteLogFile(String path) {
} catch (Exception ignored) {
}
}
+
+ /** 日志类型 */
+ enum Type {
+ /** 操作日志 */
+ OPERATION,
+ /** 运行日志 */
+ RUNNING
+ }
}
From 0b44412b718d4a990ccef7f9a3c9862dee617ec3 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 14:29:25 +0800
Subject: [PATCH 04/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index fe44fd45..57e0beb0 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-# flow-eda
### 介绍
一个由Java语言开发的基于事件驱动的流式低代码编程应用程序,您可以在编辑器中采用拖拽的形式来实现业务编程工作,一键运行和停止,让开发工作变得更简单高效。
欢迎各路大神共同参与开发,项目持续开发中
**项目名称介绍:**
- flow: 流式编程
- eda: 事件驱动应用程序(Event Driven Application)
**在线DEMO**
作者本人自费租了云服务器,搭建了在线DEMO,开源不易,请珍惜服务器资源,感谢!
Vue3版本[在线demo](http://36.138.228.74:90/)
React版本[在线demo](http://36.138.228.74:90/react/)
**项目展示:**



**Vue3版本界面:**

**React版本界面:**

**编辑器界面:**

期待您的参与,项目持续开发中...
### 项目模块说明
1. flow-eda-common 公共工具模块
2. flow-eda-runner 流运行引擎模块
3. flow-eda-web 后台管理web模块
4. flow-eda-logger 日志管理模块
5. flow-eda-vue 前端vue模块
6. flow-eda-react 前端react模块
### 后端技术栈
- 部署:docker,版本20.10.14
- 部署:docker-compose,版本2.5.0
- 数据库:mysql,版本8.0.28
- 微服务框架:springboot,版本2.6.4
- 持久化框架:mybatis,版本2.2.2
- 代码插件:lombok,版本1.18.22
- 服务注册中心:nacos,版本2.0.4
- 服务远程调用:dubbo,版本3.0.7
- 数据推送:websocket,版本2.6.4
- 消息队列:rabbitmq,版本3.9.15
### 支持的功能节点
**基础**
- [x] start节点,是触发流程执行的起始节点
- [x] timer节点,定时器,定时触发流程,支持周期触发和cron表达式触发,可指定执行次数,可输出指定格式的时间戳
- [x] output节点,输出节点,用于输出上游节点传递下来的输出参数
- [x] delay节点,延时器,用于延迟指定时间后再执行其下游节点
**解析**
- [x] json解析器,用于解析上游节点的输出参数,获取用户需要的参数信息
- [ ] xml解析器,用于解析xml格式的数据,获取指定xml标签内的内容
- [ ] html解析器,用于解析html网页内容,获取指定内容数据
**网络**
- [x] HTTP请求节点,可发送HTTP请求,支持herder、token等请求头,支持url带参数,支持由上游节点输入的变量
- [ ] HTTP响应节点,可自定义http服务,指定http参数和响应内容,可动态响应数据
- [ ] websocket客户端,可用于连接websocket服务,发送和接收数据
- [ ] websocket服务端,创建一个websocket服务,可响应客户端的连接和数据的接收/发送
- [ ] TCP请求节点,可发送TCP请求,并接收响应数据
- [ ] TCP响应节点,创建一个TCP服务,可用于响应TCP客户端的请求
- [ ] MQTT请求节点,可向指定topic中发送MQTT请求
- [ ] MQTT响应节点,创建一个MQTT服务,可用于响应客户端的请求
**数据库**
- [ ] mysql节点,可连接mysql数据库,执行自定义sql语句,输出查询结果
- [ ] mysql结果解析器,用于解析mysql数据库的查询结果,输出指定内容
- [ ] mongodb节点,可连接mongodb数据库,执行自定义查询语句,输出查询结果
持续开发中...
### 主要功能点
- 支持绘制任意的流程图,没有繁琐的约束,仅针对不同节点的参数做了校验
- 各节点地位平等,不分头尾,可任意连接绘制,连接数量无上限,仅对节点的功能做了区分
- 节点支持自定义参数,支持使用占位符${}获取参数值,由上至下可无限传递,可在任意位置取值
- 绘制流程图支持常用快捷键,可使用快捷键对节点进行操作
- 支持查看实时运行状态变化,可在页面上实时看到流程运行至哪一步,以及各节点当前的状态、错误信息等
- 查看实时运行日志功能,可在流程运行时查看日志,内含各个节点的输入输出参数
- 流程运行时,支持停止运行功能,可立即停止当前流程的运行
- 流程采用并行运行的方式,会自动从流程中找出所有起始节点开始并行运行,数据隔离,互不干扰
- 日志管理功能,采集了所有的运行日志和操作日志,用户可在页面上查看日志内容
更多功能,等着你发现!
### 项目部署
#### Docker 部署
部署mysql
```shell script
docker run --privileged=true -d -v /root/app/mysql/data/:/var/lib/mysql -v /root/app/mysql/conf.d:/etc/mysql/conf.d -v /root/app/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
```
部署rabbitmq
```shell script
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq -v /root/app/rabbitmq/data:/var/lib/rabbitmq --restart=always rabbitmq
# 开启后台管理页面的插件(可选)
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management
exit
```
部署nacos
```shell script
docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=10.0.4.17 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_DB_NAME=nacos_config -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=256m -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true --name nacos --restart=always nacos/nacos-server
```
部署springboot应用
```shell script
# 打包镜像
sh build.sh
# 启动应用
sh start.sh
```
#### docker-compose 部署
```shell script
# 打包镜像
sh build.sh
# 创建容器,在`docker-compose.yml`文件路径下执行
docker-compose up -d
```
### 待开发项
- [ ] 功能节点待补充,目前暂时想不出来还需要哪些可能用到的功能节点,欢迎任何有想法的朋友提issue,我尽可能地扩展功能节点
- [ ] 由于流程是并行运行,而且非阻塞节点运行速度很快,这就导致使用websocket在同一个session下推送消息会报错,目前采用的是加锁的形式避免问题,后期考虑使用EMQX替代websocket进行消息推送
- [ ] 新增oauth模块,用于鉴权认证,整个项目需要实现鉴权和数据隔离
- [ ] 考虑到广大开发者朋友们的本地调试便捷性,后期可能会使用Feign代替Dubbo和Mq,去除注册中心nacos,减少部署占用,方便本地运行和调试
- [ ] 由于部署在线demo云服务器的资源限制(穷!),本项目全部线上部署目前占用总内存4G左右,导致很多中间件引入进来后服务器资源不够部署,后期考虑等服务器资源足够后,引入redis做分布式缓存,将mysql进行读写分离,引入Prometheus+Grafana实现项目监控,采用k8s部署等一系列优化(等买的起新的服务器再说-.-)
\ No newline at end of file
+# flow-eda
### 介绍
此分支使用Feign替代了dubbo+nacos的技术方案,方便用户本地调试。
使用此分支无需安装nacos,本地启动应用仅需要mysql数据库和rabbitmq服务即可,各服务之间采用Feign进行http调用。
**说明:** 本分支与master的区别仅仅是使用Feign替代了dubbo+nacos的服务调用方案,其他代码完全一致。
**项目名称介绍:**
- flow: 流式编程
- eda: 事件驱动应用程序(Event Driven Application)
**在线DEMO**
作者本人自费租了云服务器,搭建了在线DEMO,开源不易,请珍惜服务器资源,感谢!
Vue3版本[在线demo](http://36.138.228.74:90/)
React版本[在线demo](http://36.138.228.74:90/react/)
**项目展示:**



**Vue3版本界面:**

**React版本界面:**

**编辑器界面:**

期待您的参与,项目持续开发中...
### 项目模块说明
1. flow-eda-common 公共工具模块
2. flow-eda-runner 流运行引擎模块
3. flow-eda-web 后台管理web模块
4. flow-eda-logger 日志管理模块
5. flow-eda-vue 前端vue模块
6. flow-eda-react 前端react模块
### 后端技术栈
- 部署:docker,版本20.10.14
- 部署:docker-compose,版本2.5.0
- 数据库:mysql,版本8.0.28
- 微服务框架:springboot,版本2.6.4
- 持久化框架:mybatis,版本2.2.2
- 代码插件:lombok,版本1.18.22
- 服务注册中心:nacos,版本2.0.4
- 服务远程调用:dubbo,版本3.0.7
- 数据推送:websocket,版本2.6.4
- 消息队列:rabbitmq,版本3.9.15
### 支持的功能节点
**基础**
- [x] start节点,是触发流程执行的起始节点
- [x] timer节点,定时器,定时触发流程,支持周期触发和cron表达式触发,可指定执行次数,可输出指定格式的时间戳
- [x] output节点,输出节点,用于输出上游节点传递下来的输出参数
- [x] delay节点,延时器,用于延迟指定时间后再执行其下游节点
**解析**
- [x] json解析器,用于解析上游节点的输出参数,获取用户需要的参数信息
- [ ] xml解析器,用于解析xml格式的数据,获取指定xml标签内的内容
- [ ] html解析器,用于解析html网页内容,获取指定内容数据
**网络**
- [x] HTTP请求节点,可发送HTTP请求,支持herder、token等请求头,支持url带参数,支持由上游节点输入的变量
- [ ] HTTP响应节点,可自定义http服务,指定http参数和响应内容,可动态响应数据
- [ ] websocket客户端,可用于连接websocket服务,发送和接收数据
- [ ] websocket服务端,创建一个websocket服务,可响应客户端的连接和数据的接收/发送
- [ ] TCP请求节点,可发送TCP请求,并接收响应数据
- [ ] TCP响应节点,创建一个TCP服务,可用于响应TCP客户端的请求
- [ ] MQTT请求节点,可向指定topic中发送MQTT请求
- [ ] MQTT响应节点,创建一个MQTT服务,可用于响应客户端的请求
**数据库**
- [ ] mysql节点,可连接mysql数据库,执行自定义sql语句,输出查询结果
- [ ] mysql结果解析器,用于解析mysql数据库的查询结果,输出指定内容
- [ ] mongodb节点,可连接mongodb数据库,执行自定义查询语句,输出查询结果
持续开发中...
### 主要功能点
- 支持绘制任意的流程图,没有繁琐的约束,仅针对不同节点的参数做了校验
- 各节点地位平等,不分头尾,可任意连接绘制,连接数量无上限,仅对节点的功能做了区分
- 节点支持自定义参数,支持使用占位符${}获取参数值,由上至下可无限传递,可在任意位置取值
- 绘制流程图支持常用快捷键,可使用快捷键对节点进行操作
- 支持查看实时运行状态变化,可在页面上实时看到流程运行至哪一步,以及各节点当前的状态、错误信息等
- 查看实时运行日志功能,可在流程运行时查看日志,内含各个节点的输入输出参数
- 流程运行时,支持停止运行功能,可立即停止当前流程的运行
- 流程采用并行运行的方式,会自动从流程中找出所有起始节点开始并行运行,数据隔离,互不干扰
- 日志管理功能,采集了所有的运行日志和操作日志,用户可在页面上查看日志内容
更多功能,等着你发现!
### 项目部署
#### Docker 部署
部署mysql
```shell script
docker run --privileged=true -d -v /root/app/mysql/data/:/var/lib/mysql -v /root/app/mysql/conf.d:/etc/mysql/conf.d -v /root/app/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
```
部署rabbitmq
```shell script
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq -v /root/app/rabbitmq/data:/var/lib/rabbitmq --restart=always rabbitmq
# 开启后台管理页面的插件(可选)
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management
exit
```
部署nacos
```shell script
docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=10.0.4.17 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_DB_NAME=nacos_config -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=256m -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true --name nacos --restart=always nacos/nacos-server
```
部署springboot应用
```shell script
# 打包镜像
sh build.sh
# 启动应用
sh start.sh
```
#### docker-compose 部署
```shell script
# 打包镜像
sh build.sh
# 创建容器,在`docker-compose.yml`文件路径下执行
docker-compose up -d
```
### 待开发项
- [ ] 功能节点待补充,目前暂时想不出来还需要哪些可能用到的功能节点,欢迎任何有想法的朋友提issue,我尽可能地扩展功能节点
- [ ] 由于流程是并行运行,而且非阻塞节点运行速度很快,这就导致使用websocket在同一个session下推送消息会报错,目前采用的是加锁的形式避免问题,后期考虑使用EMQX替代websocket进行消息推送
- [ ] 新增oauth模块,用于鉴权认证,整个项目需要实现鉴权和数据隔离
- [ ] 考虑到广大开发者朋友们的本地调试便捷性,后期可能会使用Feign代替Dubbo和Mq,去除注册中心nacos,减少部署占用,方便本地运行和调试
- [ ] 由于部署在线demo云服务器的资源限制(穷!),本项目全部线上部署目前占用总内存4G左右,导致很多中间件引入进来后服务器资源不够部署,后期考虑等服务器资源足够后,引入redis做分布式缓存,将mysql进行读写分离,引入Prometheus+Grafana实现项目监控,采用k8s部署等一系列优化(等买的起新的服务器再说-.-)
\ No newline at end of file
From 947eb00a29025d63064970bfe8c5c612c25e8d46 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 14:55:15 +0800
Subject: [PATCH 05/28] =?UTF-8?q?=E7=A7=BB=E9=99=A4dubbo-api=EF=BC=8C?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0model?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../eda/common/dubbo/api/FlowDataService.java | 29 -----------------
.../eda/common/dubbo/api/FlowInfoService.java | 12 -------
.../eda/common/dubbo/api/LogsService.java | 32 -------------------
.../common/{dubbo => }/model/FlowData.java | 2 +-
.../eda/common/{dubbo => }/model/Logs.java | 2 +-
5 files changed, 2 insertions(+), 75 deletions(-)
delete mode 100644 flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowDataService.java
delete mode 100644 flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java
delete mode 100644 flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/LogsService.java
rename flow-eda-common/src/main/java/com/flow/eda/common/{dubbo => }/model/FlowData.java (91%)
rename flow-eda-common/src/main/java/com/flow/eda/common/{dubbo => }/model/Logs.java (96%)
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowDataService.java b/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowDataService.java
deleted file mode 100644
index dd25f5f4..00000000
--- a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowDataService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.flow.eda.common.dubbo.api;
-
-import com.flow.eda.common.dubbo.model.FlowData;
-
-import java.util.List;
-
-/** 流数据接口 */
-public interface FlowDataService {
- /**
- * 运行当前流程
- *
- * @param data 流数据
- */
- void runFlowData(List data);
-
- /**
- * 停止当前流程
- *
- * @param flowId 流程id
- */
- void stopFlowData(String flowId);
-
- /**
- * 清理当前流程缓存数据(流程运行结束后调用)
- *
- * @param flowId 流程id
- */
- void clearFlowData(String flowId);
-}
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java b/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java
deleted file mode 100644
index f6cc6859..00000000
--- a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.flow.eda.common.dubbo.api;
-
-/** 获取流程信息接口 */
-public interface FlowInfoService {
- /**
- * 获取流程状态
- *
- * @param flowId 流程id
- * @return 返回流程当前状态
- */
- String getFlowStatus(String flowId);
-}
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/LogsService.java b/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/LogsService.java
deleted file mode 100644
index 55804ee0..00000000
--- a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/LogsService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.flow.eda.common.dubbo.api;
-
-import com.flow.eda.common.dubbo.model.Logs;
-
-import java.util.List;
-
-/** 日志服务接口 */
-public interface LogsService {
-
- /**
- * 获取日志信息列表
- *
- * @param type 日志类型
- * @return 日志信息列表
- */
- List getLogList(Type type);
-
- /**
- * 删除日志文件
- *
- * @param path 日志文件路径
- */
- void deleteLogFiles(List path);
-
- /** 日志类型 */
- enum Type {
- /** 操作日志 */
- OPERATION,
- /** 运行日志 */
- RUNNING
- }
-}
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/model/FlowData.java b/flow-eda-common/src/main/java/com/flow/eda/common/model/FlowData.java
similarity index 91%
rename from flow-eda-common/src/main/java/com/flow/eda/common/dubbo/model/FlowData.java
rename to flow-eda-common/src/main/java/com/flow/eda/common/model/FlowData.java
index b5e48df3..58df500f 100644
--- a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/model/FlowData.java
+++ b/flow-eda-common/src/main/java/com/flow/eda/common/model/FlowData.java
@@ -1,4 +1,4 @@
-package com.flow.eda.common.dubbo.model;
+package com.flow.eda.common.model;
import lombok.Data;
import org.bson.Document;
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/model/Logs.java b/flow-eda-common/src/main/java/com/flow/eda/common/model/Logs.java
similarity index 96%
rename from flow-eda-common/src/main/java/com/flow/eda/common/dubbo/model/Logs.java
rename to flow-eda-common/src/main/java/com/flow/eda/common/model/Logs.java
index 2870e691..083a09b4 100644
--- a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/model/Logs.java
+++ b/flow-eda-common/src/main/java/com/flow/eda/common/model/Logs.java
@@ -1,4 +1,4 @@
-package com.flow.eda.common.dubbo.model;
+package com.flow.eda.common.model;
import lombok.Getter;
From 1b15af5221f2e9e1b9b8e2ee275c9d281a66ad9a Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:00:46 +0800
Subject: [PATCH 06/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/flow/eda/logger/logs/LogsController.java | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java b/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java
index 08bb7eef..aa8895c5 100644
--- a/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java
+++ b/flow-eda-logger/src/main/java/com/flow/eda/logger/logs/LogsController.java
@@ -1,7 +1,7 @@
package com.flow.eda.logger.logs;
-import com.flow.eda.common.dubbo.model.Logs;
import com.flow.eda.common.http.Result;
+import com.flow.eda.common.model.Logs;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -37,9 +37,8 @@ public Result> getLogList(@RequestParam Type type) {
* @param path 日志文件路径
*/
@DeleteMapping("/logs")
- public Result deleteLogs(@RequestBody List path) {
+ public void deleteLogs(@RequestBody List path) {
path.forEach(this::deleteLogFile);
- return Result.ok();
}
/** 获取操作日志信息列表 */
From c60b77aa066c111607f731cd05ef9c8a7f1b0d7f Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:01:43 +0800
Subject: [PATCH 07/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0Feign=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=EF=BC=8C=E6=B3=A8=E5=85=A5=E5=85=A8=E5=B1=80=E5=BC=82=E5=B8=B8?=
=?UTF-8?q?=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/flow/eda/logger/FlowEdaLoggerApplication.java | 4 ++++
flow-eda-logger/src/main/resources/application.yaml | 3 ---
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
index 7419af46..7fc5b7af 100644
--- a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
+++ b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
@@ -2,10 +2,14 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+@EnableFeignClients
@SpringBootApplication
+@ComponentScan(basePackages = {"com.flow.eda.logger", "com.flow.eda.common.config"})
public class FlowEdaLoggerApplication {
public static void main(String[] args) {
diff --git a/flow-eda-logger/src/main/resources/application.yaml b/flow-eda-logger/src/main/resources/application.yaml
index a604aad6..89ad4d8a 100644
--- a/flow-eda-logger/src/main/resources/application.yaml
+++ b/flow-eda-logger/src/main/resources/application.yaml
@@ -8,6 +8,3 @@ spring:
port: 5672
username: guest
password: guest
-logging:
- level:
- com.alibaba.nacos.common.remote.client: warn
From 07cb10a98455511ba2e971f206c5510d0628e6d2 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:35:06 +0800
Subject: [PATCH 08/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0Feign=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
index 7fc5b7af..310e2c86 100644
--- a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
+++ b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
@@ -2,12 +2,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-@EnableFeignClients
@SpringBootApplication
@ComponentScan(basePackages = {"com.flow.eda.logger", "com.flow.eda.common.config"})
public class FlowEdaLoggerApplication {
From 7520d600b1b8205a777120b24d6f76a43bd07b97 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:38:21 +0800
Subject: [PATCH 09/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../eda/runner/data/FlowDataController.java | 45 +++++++++++++++++++
.../eda/runner/data/FlowDataServiceImpl.java | 31 -------------
2 files changed, 45 insertions(+), 31 deletions(-)
create mode 100644 flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataController.java
delete mode 100644 flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataServiceImpl.java
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataController.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataController.java
new file mode 100644
index 00000000..a469d820
--- /dev/null
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataController.java
@@ -0,0 +1,45 @@
+package com.flow.eda.runner.data;
+
+import com.flow.eda.common.model.FlowData;
+import com.flow.eda.runner.runtime.FlowDataRuntime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/** 流程数据接口 */
+@RestController
+@RequestMapping("/api/v1/feign")
+public class FlowDataController {
+ @Autowired private FlowDataRuntime flowDataRuntime;
+
+ /**
+ * 运行当前流程
+ *
+ * @param data 流数据
+ */
+ @PostMapping("/flow/run")
+ public void runFlowData(@RequestBody List data) {
+ flowDataRuntime.runFlowData(data);
+ }
+
+ /**
+ * 停止当前流程
+ *
+ * @param flowId 流程id
+ */
+ @PostMapping("/flow/stop")
+ public void stopFlowData(@RequestParam String flowId) {
+ flowDataRuntime.stopFlowData(flowId);
+ }
+
+ /**
+ * 清理当前流程缓存数据(流程运行结束后调用)
+ *
+ * @param flowId 流程id
+ */
+ @PostMapping("/flow/clear")
+ public void clearFlowData(@RequestParam String flowId) {
+ flowDataRuntime.clearFlowData(flowId);
+ }
+}
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataServiceImpl.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataServiceImpl.java
deleted file mode 100644
index a7abec60..00000000
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/data/FlowDataServiceImpl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.flow.eda.runner.data;
-
-import com.flow.eda.common.dubbo.api.FlowDataService;
-import com.flow.eda.common.dubbo.model.FlowData;
-import com.flow.eda.runner.runtime.FlowDataRuntime;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-@DubboService(interfaceClass = FlowDataService.class)
-public class FlowDataServiceImpl implements FlowDataService {
- @Autowired private FlowDataRuntime flowDataRuntime;
-
- @Override
- public void runFlowData(List data) {
- flowDataRuntime.runFlowData(data);
- }
-
- @Override
- public void stopFlowData(String flowId) {
- flowDataRuntime.stopFlowData(flowId);
- }
-
- @Override
- public void clearFlowData(String flowId) {
- flowDataRuntime.clearFlowData(flowId);
- }
-}
From 940992b18f854e65c226122050c193e49b129903 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:38:38 +0800
Subject: [PATCH 10/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8E=B7=E5=8F=96?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=8A=B6=E6=80=81=E4=BF=A1=E6=81=AF=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../eda/runner/status/FlowStatusClient.java | 19 +++++++++++++++++++
.../eda/runner/status/FlowStatusService.java | 9 ++++-----
2 files changed, 23 insertions(+), 5 deletions(-)
create mode 100644 flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java
new file mode 100644
index 00000000..bdf27656
--- /dev/null
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java
@@ -0,0 +1,19 @@
+package com.flow.eda.runner.status;
+
+import com.flow.eda.common.http.Result;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/** 获取流程状态信息接口 */
+@FeignClient(name = "flowStatus", url = "localhost:8081")
+public interface FlowStatusClient {
+ /**
+ * 获取流程状态
+ *
+ * @param flowId 流程id
+ * @return 返回流程当前状态
+ */
+ @GetMapping("/api/v1/feign/flow/status")
+ Result getFlowStatus(@RequestParam String flowId);
+}
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
index f671c168..faa68c1d 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
@@ -1,10 +1,9 @@
package com.flow.eda.runner.status;
-import com.flow.eda.common.dubbo.api.FlowInfoService;
-import com.flow.eda.common.dubbo.model.FlowData;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.runner.node.Node;
-import org.apache.dubbo.config.annotation.DubboReference;
import org.bson.Document;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -21,7 +20,7 @@ public class FlowStatusService {
/** 临时存储流数据 */
private final Map> dataMap = new HashMap<>();
- @DubboReference private FlowInfoService flowInfoService;
+ @Autowired private FlowStatusClient flowStatusClient;
public void startRun(
String flowId, List data, List starts, List timer) {
@@ -41,7 +40,7 @@ public void startRun(
public String getFlowStatus(String flowId, Document message) {
String nodeId = message.getString("nodeId");
if (!nodeMap.containsKey(flowId) || nodeId == null) {
- return flowInfoService.getFlowStatus(flowId);
+ return flowStatusClient.getFlowStatus(flowId).getResult();
}
String status = message.getString("status");
if (Node.Status.FAILED.name().equals(status)) {
From cc5fa3e7648f3ffaef6410694abf7c2e1a9ece65 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:39:21 +0800
Subject: [PATCH 11/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0Feign=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../eda/runner/FlowEdaRunnerApplication.java | 8 ++++----
.../com/flow/eda/runner/node/NodeTypeEnum.java | 2 +-
.../flow/eda/runner/runtime/FlowDataRuntime.java | 2 +-
.../flow/eda/runner/runtime/FlowExecutor.java | 2 +-
.../src/main/resources/application.yaml | 16 ----------------
5 files changed, 7 insertions(+), 23 deletions(-)
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java
index 0af5e337..39c0d197 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java
@@ -1,15 +1,15 @@
package com.flow.eda.runner;
import com.flow.eda.runner.status.FlowNodeWebsocket;
-import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
-import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
-@EnableDubbo
-@DubboComponentScan(basePackages = "com.flow.eda.runner.data")
+@EnableFeignClients
@SpringBootApplication
+@ComponentScan(basePackages = {"com.flow.eda.runner", "com.flow.eda.common.config"})
public class FlowEdaRunnerApplication {
public static void main(String[] args) {
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/NodeTypeEnum.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/NodeTypeEnum.java
index b837536b..f25da0c9 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/NodeTypeEnum.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/NodeTypeEnum.java
@@ -1,7 +1,7 @@
package com.flow.eda.runner.node;
-import com.flow.eda.common.dubbo.model.FlowData;
import com.flow.eda.common.exception.InternalException;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.runner.node.delay.DelayNode;
import com.flow.eda.runner.node.http.HttpNode;
import com.flow.eda.runner.node.output.OutputNode;
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowDataRuntime.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowDataRuntime.java
index 845e0393..31f78f74 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowDataRuntime.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowDataRuntime.java
@@ -1,6 +1,6 @@
package com.flow.eda.runner.runtime;
-import com.flow.eda.common.dubbo.model.FlowData;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.runner.node.Node;
import com.flow.eda.runner.node.NodeTypeEnum;
import com.flow.eda.runner.status.FlowNodeWebsocket;
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowExecutor.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowExecutor.java
index d246fad0..11cb4c52 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowExecutor.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/runtime/FlowExecutor.java
@@ -1,7 +1,7 @@
package com.flow.eda.runner.runtime;
-import com.flow.eda.common.dubbo.model.FlowData;
import com.flow.eda.common.exception.FlowException;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.runner.node.Node;
import com.flow.eda.runner.node.NodeTypeEnum;
import com.flow.eda.runner.status.FlowNodeWebsocket;
diff --git a/flow-eda-runner/src/main/resources/application.yaml b/flow-eda-runner/src/main/resources/application.yaml
index 94362381..85f0c8ae 100644
--- a/flow-eda-runner/src/main/resources/application.yaml
+++ b/flow-eda-runner/src/main/resources/application.yaml
@@ -10,19 +10,3 @@ spring:
password: guest
log_exchange: flow.log
log_routing_key: flow.running.log
-dubbo:
- application:
- name: flow-eda-runner
- qos-enable: false
- qos-accept-foreign-ip: false
- registry:
- protocol: dubbo
- address: nacos://localhost:8848
- username: nacos
- password: nacos
- protocol:
- name: dubbo
- port: 20882
-logging:
- level:
- com.alibaba.nacos.common.remote.client: warn
From 1fd4118d5767379a5d5cc3bf9536e4dfd94c0c07 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:40:14 +0800
Subject: [PATCH 12/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?FeignClient?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../web/flow/node/data/FlowDataClient.java | 37 +++++++++++++++++++
.../web/flow/node/data/NodeDataService.java | 10 ++---
2 files changed, 41 insertions(+), 6 deletions(-)
create mode 100644 flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/FlowDataClient.java
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/FlowDataClient.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/FlowDataClient.java
new file mode 100644
index 00000000..c80cdac3
--- /dev/null
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/FlowDataClient.java
@@ -0,0 +1,37 @@
+package com.flow.eda.web.flow.node.data;
+
+import com.flow.eda.common.model.FlowData;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/** 流程数据接口 */
+@FeignClient(name = "flowData", url = "localhost:8088")
+public interface FlowDataClient {
+ /**
+ * 运行当前流程
+ *
+ * @param data 流数据
+ */
+ @PostMapping("/api/v1/feign/flow/run")
+ void runFlowData(@RequestBody List data);
+
+ /**
+ * 停止当前流程
+ *
+ * @param flowId 流程id
+ */
+ @PostMapping("/api/v1/feign/flow/stop")
+ void stopFlowData(@RequestParam String flowId);
+
+ /**
+ * 清理当前流程缓存数据(流程运行结束后调用)
+ *
+ * @param flowId 流程id
+ */
+ @PostMapping("/api/v1/feign/flow/clear")
+ void clearFlowData(@RequestParam String flowId);
+}
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java
index 668f2b43..04adeda4 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java
@@ -1,13 +1,11 @@
package com.flow.eda.web.flow.node.data;
-import com.flow.eda.common.dubbo.api.FlowDataService;
-import com.flow.eda.common.dubbo.model.FlowData;
import com.flow.eda.common.exception.InvalidStateException;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.common.utils.MergeBuilder;
import com.flow.eda.web.flow.FlowService;
import com.flow.eda.web.flow.node.type.NodeType;
import com.flow.eda.web.flow.node.type.NodeTypeService;
-import org.apache.dubbo.config.annotation.DubboReference;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -20,7 +18,7 @@
@Service
public class NodeDataService {
- @DubboReference private FlowDataService flowDataService;
+ @Autowired private FlowDataClient flowDataClient;
@Autowired private NodeDataMapper nodeDataMapper;
@Autowired private NodeTypeService nodeTypeService;
@Autowired private FlowService flowService;
@@ -51,14 +49,14 @@ public void runNodeData(String flowId) {
// 调用远程接口,运行当前流数据
List data = new ArrayList<>();
list.forEach(n -> data.add(convert(n)));
- flowDataService.runFlowData(data);
+ flowDataClient.runFlowData(data);
}
/** 停止运行当前流程 */
public void stopNodeData(String flowId) {
flowService.findById(flowId);
// 调用远程接口,停止运行当前流程
- flowDataService.stopFlowData(flowId);
+ flowDataClient.stopFlowData(flowId);
}
private FlowData convert(NodeData nodeData) {
From 33a33703fc9f3c3d72b1354e4c862108c8fe4ee8 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:40:43 +0800
Subject: [PATCH 13/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8E=B7=E5=8F=96?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=8A=B6=E6=80=81=E4=BF=A1=E6=81=AF=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../web/flow/status/FlowInfoServiceImpl.java | 18 -------------
.../web/flow/status/FlowStatusController.java | 27 +++++++++++++++++++
.../web/flow/status/FlowStatusService.java | 7 +++--
3 files changed, 30 insertions(+), 22 deletions(-)
delete mode 100644 flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java
create mode 100644 flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java
deleted file mode 100644
index 3b1051b3..00000000
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.flow.eda.web.flow.status;
-
-import com.flow.eda.common.dubbo.api.FlowInfoService;
-import com.flow.eda.web.flow.FlowService;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-@DubboService(interfaceClass = FlowInfoService.class)
-public class FlowInfoServiceImpl implements FlowInfoService {
- @Autowired private FlowService flowService;
-
- @Override
- public String getFlowStatus(String flowId) {
- return flowService.findById(flowId).getStatus().name();
- }
-}
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java
new file mode 100644
index 00000000..44150522
--- /dev/null
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java
@@ -0,0 +1,27 @@
+package com.flow.eda.web.flow.status;
+
+import com.flow.eda.common.http.Result;
+import com.flow.eda.web.flow.FlowService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/** 获取流程状态信息接口 */
+@RestController
+@RequestMapping("/api/v1/feign")
+public class FlowStatusController {
+ @Autowired private FlowService flowService;
+
+ /**
+ * 获取流程状态
+ *
+ * @param flowId 流程id
+ * @return 返回流程当前状态
+ */
+ @GetMapping("/flow/status")
+ public Result getFlowStatus(@RequestParam String flowId) {
+ return Result.of(flowService.findById(flowId).getStatus().name());
+ }
+}
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java
index 07aa0a99..ace174db 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java
@@ -1,9 +1,8 @@
package com.flow.eda.web.flow.status;
-import com.flow.eda.common.dubbo.api.FlowDataService;
import com.flow.eda.web.flow.Flow;
import com.flow.eda.web.flow.FlowMapper;
-import org.apache.dubbo.config.annotation.DubboReference;
+import com.flow.eda.web.flow.node.data.FlowDataClient;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -14,7 +13,7 @@
@Service
public class FlowStatusService {
private final Map statusMap = new HashMap<>();
- @DubboReference private FlowDataService flowDataService;
+ @Autowired private FlowDataClient flowDataClient;
@Autowired private FlowMapper flowMapper;
/** 刷新缓存中的流程状态 */
@@ -41,7 +40,7 @@ private void updateStatus(String flowId) {
// 如果流程已执行完毕,则需要清理缓存数据
if (!Flow.Status.RUNNING.name().equals(status)) {
statusMap.remove(flowId);
- flowDataService.clearFlowData(flowId);
+ flowDataClient.clearFlowData(flowId);
}
}
}
From 55ae3722f137dcb195866d8c103f7f80836503a3 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:41:19 +0800
Subject: [PATCH 14/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/flow/eda/web/log/LogClient.java | 32 +++++++++++++++++++
.../com/flow/eda/web/log/LogController.java | 2 +-
.../java/com/flow/eda/web/log/LogRequest.java | 11 +++++--
.../java/com/flow/eda/web/log/LogService.java | 10 +++---
4 files changed, 46 insertions(+), 9 deletions(-)
create mode 100644 flow-eda-web/src/main/java/com/flow/eda/web/log/LogClient.java
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogClient.java b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogClient.java
new file mode 100644
index 00000000..5bc8b075
--- /dev/null
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogClient.java
@@ -0,0 +1,32 @@
+package com.flow.eda.web.log;
+
+import com.flow.eda.common.http.Result;
+import com.flow.eda.common.model.Logs;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/** 日志服务接口 */
+@FeignClient(name = "log", url = "localhost:8082")
+public interface LogClient {
+ /**
+ * 获取日志信息列表
+ *
+ * @param type 日志类型
+ * @return 日志信息列表
+ */
+ @GetMapping("/api/v1/feign/logs")
+ Result> getLogList(@RequestParam String type);
+
+ /**
+ * 删除日志文件
+ *
+ * @param path 日志文件路径
+ */
+ @DeleteMapping("/api/v1/feign/logs")
+ void deleteLogFiles(@RequestBody List path);
+}
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java
index e4cb4d71..54c4fa90 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java
@@ -1,8 +1,8 @@
package com.flow.eda.web.log;
-import com.flow.eda.common.dubbo.model.Logs;
import com.flow.eda.common.exception.MissingRequestParameterException;
import com.flow.eda.common.http.Result;
+import com.flow.eda.common.model.Logs;
import com.flow.eda.common.utils.CollectionUtil;
import com.flow.eda.web.http.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogRequest.java b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogRequest.java
index 43d52619..8d84496f 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogRequest.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogRequest.java
@@ -1,6 +1,5 @@
package com.flow.eda.web.log;
-import com.flow.eda.common.dubbo.api.LogsService;
import com.flow.eda.web.http.PageRequest;
import lombok.Getter;
import lombok.Setter;
@@ -8,5 +7,13 @@
@Getter
@Setter
public class LogRequest extends PageRequest {
- private LogsService.Type type;
+ private Type type;
+
+ /** 日志类型 */
+ enum Type {
+ /** 操作日志 */
+ OPERATION,
+ /** 运行日志 */
+ RUNNING
+ }
}
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java
index 40fe51cf..33b7c563 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java
@@ -1,12 +1,10 @@
package com.flow.eda.web.log;
-import com.flow.eda.common.dubbo.api.LogsService;
-import com.flow.eda.common.dubbo.model.Logs;
+import com.flow.eda.common.model.Logs;
import com.flow.eda.common.utils.CollectionUtil;
import com.flow.eda.common.utils.MergeBuilder;
import com.flow.eda.web.flow.Flow;
import com.flow.eda.web.flow.FlowMapper;
-import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -16,12 +14,12 @@
@Service
public class LogService {
- @DubboReference private LogsService logsService;
+ @Autowired private LogClient logClient;
@Autowired private FlowMapper flowMapper;
/** 获取日志文件信息列表 */
public List getLogList(LogRequest request) {
- List list = logsService.getLogList(request.getType());
+ List list = logClient.getLogList(request.getType().name()).getResult();
List ids = filterMap(list, l -> l.getFlow() != null, Logs::getFlow);
if (CollectionUtil.isNotEmpty(ids)) {
// 聚合流程名称
@@ -38,7 +36,7 @@ public List getLogList(LogRequest request) {
/** 删除日志文件 */
public void deleteLogs(List path) {
- logsService.deleteLogFiles(path);
+ logClient.deleteLogFiles(path);
}
private int comparingDate(String date1, String date2) {
From ed5d7d7fa0819f7867321e86d6f52007ff667fa9 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:41:42 +0800
Subject: [PATCH 15/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0Feign=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../flow/eda/web/FlowEdaWebApplication.java | 7 ++-----
.../src/main/resources/application.yaml | 19 -------------------
2 files changed, 2 insertions(+), 24 deletions(-)
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/FlowEdaWebApplication.java b/flow-eda-web/src/main/java/com/flow/eda/web/FlowEdaWebApplication.java
index a2930177..dbff9daa 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/FlowEdaWebApplication.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/FlowEdaWebApplication.java
@@ -1,17 +1,14 @@
package com.flow.eda.web;
-import com.flow.eda.web.flow.status.FlowInfoServiceImpl;
-import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
-import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
-@EnableDubbo
+@EnableFeignClients
@SpringBootApplication
@EnableTransactionManagement
-@DubboComponentScan(basePackageClasses = FlowInfoServiceImpl.class)
@ComponentScan(basePackages = {"com.flow.eda.web", "com.flow.eda.common.config"})
public class FlowEdaWebApplication {
diff --git a/flow-eda-web/src/main/resources/application.yaml b/flow-eda-web/src/main/resources/application.yaml
index 6ea53971..9d71ee3a 100644
--- a/flow-eda-web/src/main/resources/application.yaml
+++ b/flow-eda-web/src/main/resources/application.yaml
@@ -25,22 +25,3 @@ mybatis:
type-handlers-package: com.flow.eda.web.mybatis
configuration:
map-underscore-to-camel-case: true
-dubbo:
- application:
- name: flow-eda-web
- qos-enable: false
- qos-accept-foreign-ip: false
- registry:
- protocol: dubbo
- address: nacos://localhost:8848
- username: nacos
- password: nacos
- protocol:
- name: dubbo
- port: 20881
- consumer:
- check: false
- timeout: 5000
-logging:
- level:
- com.alibaba.nacos.common.remote.client: warn
From 89bf75fbaaebc694b915985cac43a6013c2a8cc8 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 15:42:32 +0800
Subject: [PATCH 16/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0docker-compose.yaml?=
=?UTF-8?q?=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docker-compose.yml | 20 --------------------
1 file changed, 20 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index 2114366c..c1b44722 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -22,26 +22,6 @@ services:
- 15672:15672
volumes:
- /root/app/rabbitmq/data:/var/lib/rabbitmq
- nacos:
- image: nacos/nacos-server
- container_name: nacos
- depends_on:
- - mysql
- restart: always
- ports:
- - 8848:8848
- - 9848:9848
- - 9849:9849
- environment:
- MODE: standalone
- SPRING_DATASOURCE_PLATFORM: mysql
- MYSQL_SERVICE_HOST: mysql
- MYSQL_SERVICE_USER: root
- MYSQL_SERVICE_PASSWORD: 123456
- MYSQL_SERVICE_DB_NAME: nacos_config
- JVM_XMS: 256m
- JVM_XMX: 256m
- JVM_XMN: 256m
nginx:
image: nginx
container_name: nginx
From ba7203e9a754ba863927e65f9fb537252fb2008b Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 24 May 2022 16:45:09 +0800
Subject: [PATCH 17/28] =?UTF-8?q?=E8=A7=A3=E5=86=B3Feign=E8=B0=83=E7=94=A8?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B=E8=87=AA=E5=8A=A8=E8=BD=AC?=
=?UTF-8?q?=E6=8D=A2=E4=B8=BALinkedHahMap=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/flow/eda/runner/node/AbstractNode.java | 12 ++++++++++--
.../com/flow/eda/runner/utils/PlaceholderUtil.java | 2 ++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/AbstractNode.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/AbstractNode.java
index 83bbdb4e..14ac25e5 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/AbstractNode.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/AbstractNode.java
@@ -5,6 +5,8 @@
import java.util.Optional;
+import static com.flow.eda.runner.utils.PlaceholderUtil.OBJECT_MAPPER;
+
/** 节点抽象类 */
public abstract class AbstractNode implements Node {
/** 节点自定义参数,可传递至下个节点 */
@@ -21,8 +23,14 @@ public abstract class AbstractNode implements Node {
*/
public AbstractNode(Document params) {
if (params != null) {
- this.payload = params.get("payload", Document.class);
- this.input = params.get("input", Document.class);
+ Object p = params.get("payload");
+ if (p != null) {
+ this.payload = OBJECT_MAPPER.convertValue(p, Document.class);
+ }
+ Object i = params.get("input");
+ if (i != null) {
+ this.input = OBJECT_MAPPER.convertValue(i, Document.class);
+ }
}
// 解析${}占位符
params = this.parsePlaceholder(params);
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/utils/PlaceholderUtil.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/utils/PlaceholderUtil.java
index 9c1acf89..d63219d6 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/utils/PlaceholderUtil.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/utils/PlaceholderUtil.java
@@ -1,5 +1,6 @@
package com.flow.eda.runner.utils;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.flow.eda.common.utils.CollectionUtil;
import org.bson.Document;
import org.springframework.util.StringUtils;
@@ -14,6 +15,7 @@
/** 解析占位符${}的工具类 */
public class PlaceholderUtil {
+ public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final Pattern REGEX = Pattern.compile("\\$\\{([^}]*)}");
/**
From 9221c85e75a50ca8e5970db2c9dde01f7fdc4290 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Sat, 2 Jul 2022 11:30:15 +0800
Subject: [PATCH 18/28] Merge
---
.../eda/logger/FlowEdaLoggerApplication.java | 7 ++++++-
.../eda/runner/FlowEdaRunnerApplication.java | 13 +++++++++----
.../node/http/request/HttpRequestNode.java | 18 +++++++++---------
.../eda/runner/status/FlowStatusService.java | 13 +++++--------
.../com/flow/eda/web/log/LogController.java | 3 +--
.../java/com/flow/eda/web/log/LogService.java | 7 ++-----
6 files changed, 32 insertions(+), 29 deletions(-)
diff --git a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
index 0380fcdf..77f79b17 100644
--- a/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
+++ b/flow-eda-logger/src/main/java/com/flow/eda/logger/FlowEdaLoggerApplication.java
@@ -7,7 +7,12 @@
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@SpringBootApplication
-@ComponentScan(basePackages = {"com.flow.eda.logger", "com.flow.eda.common.resource"})
+@ComponentScan(
+ basePackages = {
+ "com.flow.eda.logger",
+ "com.flow.eda.common.config",
+ "com.flow.eda.common.resource"
+ })
public class FlowEdaLoggerApplication {
public static void main(String[] args) {
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java
index dc4023cf..be0419e7 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/FlowEdaRunnerApplication.java
@@ -1,21 +1,26 @@
package com.flow.eda.runner;
import com.flow.eda.runner.node.http.response.HttpResponseServlet;
-import com.flow.eda.runner.status.FlowNodeWebsocket;
+import com.flow.eda.runner.utils.ApplicationContextUtil;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
-import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.servlet.DispatcherServlet;
@EnableFeignClients
@SpringBootApplication(exclude = MongoAutoConfiguration.class)
-@ComponentScan(basePackages = {"com.flow.eda.runner", "com.flow.eda.common.resource"})
+@ComponentScan(
+ basePackages = {
+ "com.flow.eda.runner",
+ "com.flow.eda.common.config",
+ "com.flow.eda.common.resource"
+ })
public class FlowEdaRunnerApplication {
public static void main(String[] args) {
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java
index bcfc7e7b..3d5a3c73 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java
@@ -29,6 +29,15 @@ public HttpRequestNode(Document params) {
super(params);
}
+ public static String verifyMethod(Document params) {
+ String method = params.getString("method");
+ NodeVerify.notBlank(method, "method");
+ List list =
+ Arrays.asList("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH");
+ NodeVerify.isTrue(list.contains(method), "method");
+ return method;
+ }
+
@Override
public void run(NodeFunction function) {
try {
@@ -106,13 +115,4 @@ private Document executeHttpRequest() throws Exception {
}
throw new InternalException("The http request has no response.");
}
-
- public static String verifyMethod(Document params) {
- String method = params.getString("method");
- NodeVerify.notBlank(method, "method");
- List list =
- Arrays.asList("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH");
- NodeVerify.isTrue(list.contains(method), "method");
- return method;
- }
}
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
index 0e1e6892..3bf453ed 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
@@ -7,10 +7,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import static com.flow.eda.common.utils.CollectionUtil.*;
@@ -27,8 +24,8 @@ public class FlowStatusService {
public void startRun(
String flowId, List data, List starts, List timer) {
- this.nodeMap.put(flowId, new ConcurrentHashSet<>());
- this.runMap.put(flowId, new ConcurrentHashSet<>());
+ this.nodeMap.put(flowId, new HashSet<>());
+ this.runMap.put(flowId, new HashSet<>());
if (isNotEmpty(starts)) {
this.parseAllNodes(flowId, data, starts);
}
@@ -63,7 +60,7 @@ public String getFlowStatus(String flowId, Document message) {
/** 判断当前流程状态是否已完成 */
public boolean isFinished(String flowId) {
if (!nodeMap.containsKey(flowId)) {
- String status = flowInfoService.getFlowStatus(flowId);
+ String status = flowStatusClient.getFlowStatus(flowId).getResult();
return Node.Status.FINISHED.name().equals(status);
}
return nodeMap.get(flowId).isEmpty();
@@ -110,7 +107,7 @@ private void parseNextNode(List data, FlowData currentNode, Set data, FlowData currentNode) {
- Set nodeSet = new ConcurrentHashSet<>();
+ Set nodeSet = new HashSet<>();
nodeSet.add(currentNode.getId());
this.parseNextNode(data, currentNode, nodeSet);
this.nodeMap.get(currentNode.getFlowId()).removeAll(nodeSet);
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java
index c12e4ce1..b27c0ee0 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogController.java
@@ -25,8 +25,7 @@ public PageResult logList(LogRequest request, Principal principal) {
throw new MissingRequestParameterException("type");
}
// 仅管理员用户可查看操作日志
- if (LogsService.Type.OPERATION.equals(request.getType())
- && !ADMIN.equals(principal.getName())) {
+ if ("OPERATION".equals(request.getType().name()) && !ADMIN.equals(principal.getName())) {
throw new InvalidVerifyTokenException("Insufficient permissions");
}
String username = ADMIN.equals(principal.getName()) ? null : principal.getName();
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java
index 09fc9ffe..90f355bd 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/log/LogService.java
@@ -18,11 +18,8 @@ public class LogService {
@Autowired private FlowMapper flowMapper;
/** 获取日志文件信息列表 */
- public List getLogList(LogRequest request) {
- List list = logClient.getLogList(request.getType().name()).getResult();
- List ids = filterMap(list, l -> l.getFlow() != null, Logs::getFlow);
public List getLogList(LogRequest request, String username) {
- List list = logsService.getLogList(request.getType());
+ List list = logClient.getLogList(request.getType().name()).getResult();
List ids;
if (username != null) {
// 根据用户进行过滤
@@ -43,7 +40,7 @@ public List getLogList(LogRequest request, String username) {
MergeBuilder.source(list, Logs::getFlow)
.target(flows, Flow::getId)
.mergeS((log, flow) -> log.setFlowName(flow.getName()));
- } else if (LogsService.Type.RUNNING.equals(request.getType())) {
+ } else if ("RUNNING".equals(request.getType().name())) {
list.clear();
}
// 根据日志的日期排序,降序
From 75662827885f85d8528b6cc0d3812c2ac6b5c113 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Sat, 2 Jul 2022 15:21:04 +0800
Subject: [PATCH 19/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=EF=BC=8C=E5=8E=BB=E9=99=A4dubbo=E7=9B=B8=E5=85=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
flow-eda-logger/src/main/resources/application.yaml | 3 ---
flow-eda-runner/src/main/resources/application.yaml | 3 ---
2 files changed, 6 deletions(-)
diff --git a/flow-eda-logger/src/main/resources/application.yaml b/flow-eda-logger/src/main/resources/application.yaml
index c6f361b7..7b2dc14c 100644
--- a/flow-eda-logger/src/main/resources/application.yaml
+++ b/flow-eda-logger/src/main/resources/application.yaml
@@ -14,6 +14,3 @@ security:
client-id: 1df7b0c1-aac0-148a14c7cba8
client-secret: zcUaT32GlwIjz4yBJjYZIIMvzf
check-token-url: http://localhost:8086/oauth/check_token
-logging:
- level:
- com.alibaba.nacos.common.remote.client: warn
diff --git a/flow-eda-runner/src/main/resources/application.yaml b/flow-eda-runner/src/main/resources/application.yaml
index f1eee6cb..831e8775 100644
--- a/flow-eda-runner/src/main/resources/application.yaml
+++ b/flow-eda-runner/src/main/resources/application.yaml
@@ -16,6 +16,3 @@ security:
client-id: 1df7b0c1-aac0-148a14c7cba8
client-secret: zcUaT32GlwIjz4yBJjYZIIMvzf
check-token-url: http://localhost:8086/oauth/check_token
-logging:
- level:
- com.alibaba.nacos.common.remote.client: warn
From bdfd8405d20f4505f6b8a261d3f1306898495bce Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Sat, 2 Jul 2022 16:27:37 +0800
Subject: [PATCH 20/28] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89Feign=E8=AF=B7?=
=?UTF-8?q?=E6=B1=82=E6=8B=A6=E6=88=AA=E5=99=A8=EF=BC=8C=E7=94=A8=E4=BA=8E?=
=?UTF-8?q?=E8=B0=83=E7=94=A8=E6=97=B6=E8=AE=A4=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../FeignOauth2RequestInterceptor.java | 71 +++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 flow-eda-common/src/main/java/com/flow/eda/common/resource/FeignOauth2RequestInterceptor.java
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/resource/FeignOauth2RequestInterceptor.java b/flow-eda-common/src/main/java/com/flow/eda/common/resource/FeignOauth2RequestInterceptor.java
new file mode 100644
index 00000000..43a1085b
--- /dev/null
+++ b/flow-eda-common/src/main/java/com/flow/eda/common/resource/FeignOauth2RequestInterceptor.java
@@ -0,0 +1,71 @@
+package com.flow.eda.common.resource;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.bson.Document;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Base64;
+
+/** 自定义Feign的请求拦截器,用于微服务之间调用时的oauth2认证 */
+@Configuration
+public class FeignOauth2RequestInterceptor implements RequestInterceptor {
+ private static final String TOKEN_URL =
+ "http://localhost:8086/oauth/token?grant_type=client_credentials";
+ private static final String AUTH = "Authorization";
+ private static final String BEARER = "Bearer ";
+
+ @Value("${security.oauth2.client-id}")
+ private String clientId;
+
+ @Value("${security.oauth2.client-secret}")
+ private String clientSecret;
+
+ @Bean
+ @ConditionalOnMissingClass
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+
+ @Override
+ public void apply(RequestTemplate requestTemplate) {
+ // 获取请求中的token,设置到header中
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication != null
+ && authentication.getDetails() instanceof OAuth2AuthenticationDetails) {
+ OAuth2AuthenticationDetails details =
+ (OAuth2AuthenticationDetails) authentication.getDetails();
+ requestTemplate.header(AUTH, BEARER + details.getTokenValue());
+ } else {
+ // 若请求中无token,则通过客户端模式向oauth2申请一个token,设置到header中
+ String basic =
+ Base64.getEncoder()
+ .encodeToString(
+ String.format("%s:%s", clientId, clientSecret).getBytes());
+ HttpHeaders headers = new HttpHeaders();
+ headers.set(AUTH, "Basic " + basic);
+ // 发送请求
+ Document response =
+ restTemplate()
+ .exchange(
+ TOKEN_URL,
+ HttpMethod.POST,
+ new HttpEntity<>(headers),
+ Document.class)
+ .getBody();
+ if (response != null) {
+ requestTemplate.header(AUTH, BEARER + response.getString("access_token"));
+ }
+ }
+ }
+}
From aeeeb7a3830483ad0465072849aa1f3434443d26 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Sat, 2 Jul 2022 16:28:21 +0800
Subject: [PATCH 21/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0oauth2=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
flow-eda-web/src/main/resources/application.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/flow-eda-web/src/main/resources/application.yaml b/flow-eda-web/src/main/resources/application.yaml
index 5cd61e94..2e5201ad 100644
--- a/flow-eda-web/src/main/resources/application.yaml
+++ b/flow-eda-web/src/main/resources/application.yaml
@@ -25,3 +25,9 @@ mybatis:
type-handlers-package: com.flow.eda.web.mybatis
configuration:
map-underscore-to-camel-case: true
+security:
+ oauth2:
+ resource-id: flow-eda
+ client-id: 1df7b0c1-aac0-148a14c7cba8
+ client-secret: zcUaT32GlwIjz4yBJjYZIIMvzf
+ check-token-url: http://localhost:8086/oauth/check_token
From 7ca3493b7339a0ea835477a5dc937314cbef8386 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Sun, 3 Jul 2022 10:28:22 +0800
Subject: [PATCH 22/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0HTTP=E5=93=8D=E5=BA=94?=
=?UTF-8?q?=E8=8A=82=E7=82=B9=EF=BC=8C=E8=8E=B7=E5=8F=96=E8=AF=B7=E6=B1=82?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E5=90=91=E4=B8=8B=E6=B8=B8=E8=BE=93=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../flow/eda/runner/node/http/response/HttpResponseNode.java | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/response/HttpResponseNode.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/response/HttpResponseNode.java
index ea6e865d..c877bb54 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/response/HttpResponseNode.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/response/HttpResponseNode.java
@@ -17,7 +17,6 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
-import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -65,9 +64,7 @@ public void handle(HttpServletRequest request, HttpServletResponse response) {
}
// 获取请求参数,向下游输出
try {
- Document data =
- Document.parse(
- IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8));
+ Document data = Document.parse(IOUtils.toString(request.getInputStream(), "UTF-8"));
Document output = output();
output.putAll(data);
callback.callback(output);
From 0877e4e746b8ba53bb7d26f58753064a8a6d79e6 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Mon, 4 Jul 2022 20:34:32 +0800
Subject: [PATCH 23/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0master=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E8=87=B3=E6=9C=AC=E5=88=86=E6=94=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../eda/runner/node/http/request/HttpRequestNode.java | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java
index 887e47f5..150a948d 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/http/request/HttpRequestNode.java
@@ -28,15 +28,6 @@ public HttpRequestNode(Document params) {
super(params);
}
- public static String verifyMethod(Document params) {
- String method = params.getString("method");
- NodeVerify.notBlank(method, "method");
- List list =
- Arrays.asList("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH");
- NodeVerify.isTrue(list.contains(method), "method");
- return method;
- }
-
@Override
public void run(NodeFunction function) {
try {
From b9cdab9e8d96f5998ae33c7ec2be04d451f211be Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Sat, 23 Jul 2022 14:35:24 +0800
Subject: [PATCH 24/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 178 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5d7e2153..faf604e1 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,178 @@
-# flow-eda
### 项目简介
flow-eda 项目是一种基于事件驱动的流式低代码编程应用程序,它的主要功能是采用可视化编程,以拖拽节点、连接组合节点的形式来完成流程绘制,达到低代码开发和实现业务编程的目的。
更多详细内容请查看[项目文档](https://linxfeng.github.io/flow-eda)
欢迎各路大神共同参与开发,项目持续扩展完善中
#### 项目名称
- **flow**: 流程图、流式编程
- **eda**: 事件驱动应用程序 (Event Driven Application)
- **flow-eda**: 一种基于事件驱动的流式低代码编程应用程序
### 项目特点
- 整个流程运行引擎全都在后端实现,前端非常轻量,所有的数据、参数、包括输入框等数据全由后端配置提供,前端仅负责根据数据展示。后期开发仅扩展后端功能即可,前端无需更改,自动兼容。
- 流程运行引擎做到模块化、配置化。后期在进行功能扩展和开发时,仅需要针对新增的功能,新增配置和新增模块功能代码即可,运行引擎自动适配。
- 后端设计采用微服务架构,各个模块之间按业务功能相互解耦。便于后期二次开发和功能扩展。
- 代码风格严格按照规范执行,后端代码遵循 Alibaba 规范,代码格式使用 google-java-format 格式化,前端代码使用 Prettier 格式化,消除代码中的标黄警告等,做到编码规范化。
### 在线演示
作者本人自费租了云服务器,搭建了在线演示 DEMO,开源不易,请珍惜服务器资源,感谢!
Vue3 版本[在线 demo](http://120.48.9.40:80)
React 版本[在线 demo](http://120.48.9.40:90)
喜欢请点点 star,谢谢^.^
### 代码仓库
- [GitHub](https://github.com/Linxfeng/flow-eda)
- [Gitee](https://gitee.com/Linxff/flow-eda)
### 项目展示


**Vue3 版本界面:**

**React 版本界面:**

**编辑器界面:**

期待您的参与,项目持续扩展完善中...
### 项目模块
- **flow-eda-common** 公共工具模块
- **flow-eda-runner** 流程运行引擎模块
- **flow-eda-web** 后台管理 web 模块
- **flow-eda-logger** 日志管理模块
- **flow-eda-oauth2** 认证鉴权模块
- **flow-eda-vue** 前端 vue 模块
- **flow-eda-react** 前端 react 模块
### 主要功能
- 支持用户登录和注册,接口鉴权、数据隔离
- 流程管理、日志管理。菜单简洁,便于用户使用
- 支持绘制任意的流程图,没有繁琐的条件约束,仅针对某些节点的必填参数做了校验
- 各功能节点地位平等,不分头尾,可任意连接绘制,连接数量无上限
- 支持用户自定义参数,使用占位符${}即可获取参数值,由上至下可无限传递,可在任意位置取值
- 支持在绘制流程图时使用常用快捷键对节点进行操作
- 流程图支持导入/导出功能,可以快速的导入绘好的流程并进行修改
- 可实时查看流程运行状态变化,便于用户了解流程运行至哪一步,以及各节点当前的状态、错误信息等
- 支持查看流程实时运行日志功能,可查看实时运行日志和历史运行日志,内含各个节点的输入输出参数
- 支持并发,流程采用并行运行的方式,会自动从流程中找出所有起始节点同时开始运行,数据隔离,互不干扰
- 提供了大量的流程图示例可供参考,每个功能节点都有对应的流程图示例
更多功能,等着你发现!
### 系统架构图

### 后端技术栈
| 技术 | 版本 | 说明 |
| --------------- | -------- | -------------------- |
| Docker | 20.10.14 | 应用容器引擎 |
| Docker Compose | 2.5.0 | 应用容器部署工具 |
| Spring Boot | 2.6.4 | 微服务框架 |
| Mybatis | 3.5.9 | ORM 框架 |
| Mysql | 8.0.28 | 数据库 |
| Maven | 3.6.3 | 项目构建管理工具 |
| PageHelper | 5.3.0 | MyBatis 物理分页插件 |
| Lombok | 1.18.22 | 代码插件 |
| Nacos | 2.0.4 | 服务注册中心 |
| Dubbo | 3.0.7 | 服务远程调用 |
| WebSocket | 9.0.58 | 数据推送 |
| RabbitMQ | 3.9.15 | 消息队列 |
| Spring Security | 5.6.2 | 认证和授权框架 |
| Security Oauth2 | 2.3.6 | 认证和授权框架 |
### 项目部署
#### Docker 部署
部署 mysql
```shell script
docker run --privileged=true -d -v /root/app/mysql/data/:/var/lib/mysql -v /root/app/mysql/conf.d:/etc/mysql/conf.d -v /root/app/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
```
部署 rabbitmq
```shell script
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq -v /root/app/rabbitmq/data:/var/lib/rabbitmq rabbitmq
# 开启后台管理页面的插件(可选)
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management
exit
```
部署 nacos
```shell script
docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=host.docker.internal -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_DB_NAME=nacos_config -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=256m -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true --name nacos nacos/nacos-server
```
部署 springboot 应用
```shell script
# 打包镜像
sh build.sh
# 启动应用
sh start.sh
```
#### docker-compose 部署
```shell script
# 打包镜像
sh build.sh
# 创建容器,在`docker-compose.yml`文件路径下执行
docker-compose up -d
```
#### 无注册中心部署
```shell script
# 切换分支
git checkout feign-replace-dubbo
# 打包镜像
sh build.sh
# 创建容器,在`docker-compose.yml`文件路径下执行
docker-compose up -d
```
### 待开发项
- [ ] 由于流程是并行运行,而且非阻塞节点运行速度很快,这就导致使用 websocket 在同一个 session 下推送消息会报错,目前采用的是加锁的形式避免问题,后期考虑使用 EMQX 替代 websocket 进行消息推送
- [x] 新增 oauth 模块,用于鉴权认证,整个项目需要实现鉴权和数据隔离
- [x] 考虑到广大开发者朋友们的本地调试便捷性,使用了 Feign 代替 Dubbo,去除注册中心 nacos,减少部署占用,方便本地运行和调试,切换到分支 feign-replace-dubbo 即可
- [ ] 由于部署在线 demo 云服务器的资源限制(穷!),本项目全部线上部署目前占用总内存 4G 左右,导致很多中间件引入进来后服务器资源不够部署,后期考虑等服务器资源足够后,引入 redis 做分布式缓存,将 mysql 进行读写分离,引入 Prometheus+Grafana 实现项目监控,采用 k8s 部署等一系列优化(等买的起新的服务器再说-.-)
PS:由于现有的服务器资源已经无法支撑后续开发的项目部署,如果你觉得此项目对您有帮助,可以进行 [捐赠](https://gitee.com/Linxff/flow-eda#%E4%BA%A4%E6%B5%81%E7%BE%A4) ,捐赠所得会全部用于项目开发,感谢!
### 交流群
若需要技术支持或者想进行技术交流,可以扫码添加本人微信或者微信群,也可以进群提开发要求,我会尽可能进行扩展开发。欢迎加群进行技术交流!


\ No newline at end of file
+# flow-eda
+
+### 项目简介
+
+flow-eda 项目是一种基于事件驱动的流式低代码编程应用程序,它的主要功能是采用可视化编程,以拖拽节点、连接组合节点的形式来完成流程绘制,达到低代码开发和实现业务编程的目的。
+更多详细内容请查看[项目文档](https://linxfeng.github.io/flow-eda)
+
+此分支使用 Feign 替代了 Dubbo+Nacos 的技术方案,方便用户本地调试。使用此分支无需安装 Nacos,本地启动应用仅需要 Mysql 数据库和 RabbitMQ 服务即可,各服务之间采用 Feign 进行 http 调用。
+
+欢迎各路大神共同参与开发,项目持续扩展完善中
+
+#### 项目名称
+
+- **flow**: 流程图、流式编程
+- **eda**: 事件驱动应用程序 (Event Driven Application)
+- **flow-eda**: 一种基于事件驱动的流式低代码编程应用程序
+
+### 项目特点
+
+- 整个流程运行引擎全都在后端实现,前端非常轻量,所有的数据、参数、包括输入框等数据全由后端配置提供,前端仅负责根据数据展示。后期开发仅扩展后端功能即可,前端无需更改,自动兼容。
+- 流程运行引擎做到模块化、配置化。后期在进行功能扩展和开发时,仅需要针对新增的功能,新增配置和新增模块功能代码即可,运行引擎自动适配。
+- 后端设计采用微服务架构,各个模块之间按业务功能相互解耦。便于后期二次开发和功能扩展。
+- 代码风格严格按照规范执行,后端代码遵循 Alibaba 规范,代码格式使用 google-java-format 格式化,前端代码使用 Prettier 格式化,消除代码中的标黄警告等,做到编码规范化。
+
+### 在线演示
+
+作者本人自费租了云服务器,搭建了在线演示 DEMO,开源不易,请珍惜服务器资源,感谢!
+
+Vue3 版本[在线 demo](http://120.48.9.40:80)
+
+React 版本[在线 demo](http://120.48.9.40:90)
+
+喜欢请点点 star,谢谢^.^
+
+### 代码仓库
+
+- [GitHub](https://github.com/Linxfeng/flow-eda)
+- [Gitee](https://gitee.com/Linxff/flow-eda)
+
+### 项目展示
+
+
+
+
+
+**Vue3 版本界面:**
+
+
+
+**React 版本界面:**
+
+
+
+**编辑器界面:**
+
+
+
+期待您的参与,项目持续扩展完善中...
+
+### 项目模块
+
+- **flow-eda-common** 公共工具模块
+- **flow-eda-runner** 流程运行引擎模块
+- **flow-eda-web** 后台管理 web 模块
+- **flow-eda-logger** 日志管理模块
+- **flow-eda-oauth2** 认证鉴权模块
+- **flow-eda-vue** 前端 vue 模块
+- **flow-eda-react** 前端 react 模块
+
+### 主要功能
+
+- 支持用户登录和注册,接口鉴权、数据隔离
+- 流程管理、日志管理。菜单简洁,便于用户使用
+- 支持绘制任意的流程图,没有繁琐的条件约束,仅针对某些节点的必填参数做了校验
+- 各功能节点地位平等,不分头尾,可任意连接绘制,连接数量无上限
+- 支持用户自定义参数,使用占位符${}即可获取参数值,由上至下可无限传递,可在任意位置取值
+- 支持在绘制流程图时使用常用快捷键对节点进行操作
+- 流程图支持导入/导出功能,可以快速的导入绘好的流程并进行修改
+- 可实时查看流程运行状态变化,便于用户了解流程运行至哪一步,以及各节点当前的状态、错误信息等
+- 支持查看流程实时运行日志功能,可查看实时运行日志和历史运行日志,内含各个节点的输入输出参数
+- 支持并发,流程采用并行运行的方式,会自动从流程中找出所有起始节点同时开始运行,数据隔离,互不干扰
+- 提供了大量的流程图示例可供参考,每个功能节点都有对应的流程图示例
+
+更多功能,等着你发现!
+
+### 系统架构图
+
+
+
+### 后端技术栈
+
+| 技术 | 版本 | 说明 |
+| --------------- | -------- | -------------------- |
+| Docker | 20.10.14 | 应用容器引擎 |
+| Docker Compose | 2.5.0 | 应用容器部署工具 |
+| Spring Boot | 2.6.4 | 微服务框架 |
+| Mybatis | 3.5.9 | ORM 框架 |
+| Mysql | 8.0.28 | 数据库 |
+| Maven | 3.6.3 | 项目构建管理工具 |
+| PageHelper | 5.3.0 | MyBatis 物理分页插件 |
+| Lombok | 1.18.22 | 代码插件 |
+| Nacos | 2.0.4 | 服务注册中心 |
+| Dubbo | 3.0.7 | 服务远程调用 |
+| WebSocket | 9.0.58 | 数据推送 |
+| RabbitMQ | 3.9.15 | 消息队列 |
+| Spring Security | 5.6.2 | 认证和授权框架 |
+| Security Oauth2 | 2.3.6 | 认证和授权框架 |
+
+### 项目部署
+
+#### Docker 部署
+
+部署 mysql
+
+```shell script
+docker run --privileged=true -d -v /root/app/mysql/data/:/var/lib/mysql -v /root/app/mysql/conf.d:/etc/mysql/conf.d -v /root/app/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
+```
+
+部署 rabbitmq
+
+```shell script
+docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq -v /root/app/rabbitmq/data:/var/lib/rabbitmq rabbitmq
+# 开启后台管理页面的插件(可选)
+docker exec -it rabbitmq bash
+rabbitmq-plugins enable rabbitmq_management
+exit
+```
+
+部署 nacos
+
+```shell script
+docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=host.docker.internal -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_DB_NAME=nacos_config -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=256m -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true --name nacos nacos/nacos-server
+```
+
+部署 springboot 应用
+
+```shell script
+# 打包镜像
+sh build.sh
+# 启动应用
+sh start.sh
+```
+
+#### docker-compose 部署
+
+```shell script
+# 打包镜像
+sh build.sh
+# 创建容器,在`docker-compose.yml`文件路径下执行
+docker-compose up -d
+```
+
+#### 无注册中心部署
+
+```shell script
+# 切换分支
+git checkout feign-replace-dubbo
+# 打包镜像
+sh build.sh
+# 创建容器,在`docker-compose.yml`文件路径下执行
+docker-compose up -d
+```
+
+### 待开发项
+
+- [ ] 由于流程是并行运行,而且非阻塞节点运行速度很快,这就导致使用 websocket 在同一个 session 下推送消息会报错,目前采用的是加锁的形式避免问题,后期考虑使用 EMQX 替代 websocket 进行消息推送
+- [x] 新增 oauth 模块,用于鉴权认证,整个项目需要实现鉴权和数据隔离
+- [x] 考虑到广大开发者朋友们的本地调试便捷性,使用了 Feign 代替 Dubbo,去除注册中心 nacos,减少部署占用,方便本地运行和调试,切换到分支 feign-replace-dubbo 即可
+- [ ] 由于部署在线 demo 云服务器的资源限制(穷!),本项目全部线上部署目前占用总内存 4G 左右,导致很多中间件引入进来后服务器资源不够部署,后期考虑等服务器资源足够后,引入 redis 做分布式缓存,将 mysql 进行读写分离,引入 Prometheus+Grafana 实现项目监控,采用 k8s 部署等一系列优化(等买的起新的服务器再说-.-)
+
+PS:由于现有的服务器资源已经无法支撑后续开发的项目部署,如果你觉得此项目对您有帮助,可以进行 [捐赠](https://gitee.com/Linxff/flow-eda#%E4%BA%A4%E6%B5%81%E7%BE%A4) ,捐赠所得会全部用于项目开发,感谢!
+
+### 交流群
+
+若需要技术支持或者想进行技术交流,可以扫码添加本人微信或者微信群,也可以进群提开发要求,我会尽可能进行扩展开发。欢迎加群进行技术交流!
+
+
+
From 4f0beda3fb79416337024d4b22f65b5dd9495ec9 Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Mon, 29 Aug 2022 15:11:34 +0800
Subject: [PATCH 25/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=88=86=E6=94=AF?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/flow/eda/web/flow/status/FlowStatusService.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java
index 2b3aeee2..da427f43 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusService.java
@@ -3,8 +3,8 @@
import com.flow.eda.common.utils.CollectionUtil;
import com.flow.eda.web.flow.Flow;
import com.flow.eda.web.flow.FlowMapper;
-import com.flow.eda.web.flow.node.data.FlowDataClient;
import com.flow.eda.web.flow.FlowRequest;
+import com.flow.eda.web.flow.node.data.FlowDataClient;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -56,6 +56,6 @@ public void stopRunningFlow() {
request.setStatus(Flow.Status.RUNNING);
request.setUsername("test");
List flowList = flowMapper.findByRequest(request);
- CollectionUtil.forEach(flowList, flow -> flowDataService.stopFlowData(flow.getId()));
+ CollectionUtil.forEach(flowList, flow -> flowDataClient.stopFlowData(flow.getId()));
}
}
From fff266399926f909311d934aeabbfb475568661d Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 11 Oct 2022 16:05:26 +0800
Subject: [PATCH 26/28] Merge master into current
---
docs/version/changelog.md | 9 +++++++++
.../eda/common/dubbo/api/FlowInfoService.java | 0
.../runner/node/subflow/SubFlowRuntime.java | 2 +-
.../eda/runner/status/FlowStatusClient.java | 12 ++++++++++++
.../eda/runner/status/FlowStatusService.java | 2 +-
.../web/flow/node/data/NodeDataService.java | 8 +++-----
.../web/flow/status/FlowInfoServiceImpl.java | 18 ------------------
.../web/flow/status/FlowStatusController.java | 16 ++++++++++++++++
8 files changed, 42 insertions(+), 25 deletions(-)
delete mode 100644 flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java
delete mode 100644 flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java
diff --git a/docs/version/changelog.md b/docs/version/changelog.md
index 569342f6..62733147 100644
--- a/docs/version/changelog.md
+++ b/docs/version/changelog.md
@@ -8,6 +8,15 @@
- 2022-09-27:实现运行子流程功能
- 2022-09-26:新增子流程节点,可选择其他流程作为子流程
+### v3.0.0
+
+- 2022-10-11:更新子流程相关项目文档
+- 2022-10-10:修复条件节点自定义参数被覆盖的问题
+- 2022-09-30:新增子输入/子输出节点,可连接父子流程之间的输入输出参数
+- 2022-09-28:关闭编辑器页面时弹出提醒确认框
+- 2022-09-27:实现运行子流程功能
+- 2022-09-26:新增子流程节点,可选择其他流程作为子流程
+
### v2.2.0
- 2022-08-24:修复切流程图换版本后重复连线问题
diff --git a/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java b/flow-eda-common/src/main/java/com/flow/eda/common/dubbo/api/FlowInfoService.java
deleted file mode 100644
index e69de29b..00000000
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/subflow/SubFlowRuntime.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/subflow/SubFlowRuntime.java
index c8df2d14..2762a9a4 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/node/subflow/SubFlowRuntime.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/node/subflow/SubFlowRuntime.java
@@ -1,7 +1,7 @@
package com.flow.eda.runner.node.subflow;
-import com.flow.eda.common.dubbo.model.FlowData;
import com.flow.eda.common.exception.FlowException;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.runner.node.NodeTypeEnum;
import com.flow.eda.runner.runtime.FlowDataRuntime;
import com.flow.eda.runner.status.FlowStatusService;
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java
index bdf27656..bef3fdf0 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusClient.java
@@ -1,10 +1,13 @@
package com.flow.eda.runner.status;
import com.flow.eda.common.http.Result;
+import com.flow.eda.common.model.FlowData;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
+import java.util.List;
+
/** 获取流程状态信息接口 */
@FeignClient(name = "flowStatus", url = "localhost:8081")
public interface FlowStatusClient {
@@ -16,4 +19,13 @@ public interface FlowStatusClient {
*/
@GetMapping("/api/v1/feign/flow/status")
Result getFlowStatus(@RequestParam String flowId);
+
+ /**
+ * 获取流程节点数据
+ *
+ * @param flowId 流程id
+ * @return 返回流程节点数据
+ */
+ @GetMapping("/api/v1/feign/flow/data")
+ Result> getFlowData(@RequestParam String flowId);
}
diff --git a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
index 7c760483..653ad7ac 100644
--- a/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
+++ b/flow-eda-runner/src/main/java/com/flow/eda/runner/status/FlowStatusService.java
@@ -80,7 +80,7 @@ public List getRunningNodes(String flowId) {
/** 获取流程节点数据 */
public List getFlowData(String flowId) {
- return flowInfoService.getFlowData(flowId);
+ return flowStatusClient.getFlowData(flowId).getResult();
}
/** 清理缓存数据 */
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java
index 363607d9..c8174f01 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/node/data/NodeDataService.java
@@ -1,13 +1,11 @@
package com.flow.eda.web.flow.node.data;
-import com.flow.eda.common.dubbo.api.FlowDataService;
-import com.flow.eda.common.dubbo.model.FlowData;
import com.flow.eda.common.exception.InvalidStateException;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.common.utils.MergeBuilder;
import com.flow.eda.web.flow.FlowService;
import com.flow.eda.web.flow.node.type.NodeType;
import com.flow.eda.web.flow.node.type.NodeTypeService;
-import org.apache.dubbo.config.annotation.DubboReference;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
@@ -21,7 +19,7 @@
@Service
public class NodeDataService {
- @DubboReference private FlowDataService flowDataService;
+ @Autowired private FlowDataClient flowDataClient;
@Autowired private NodeDataMapper nodeDataMapper;
@Autowired private NodeTypeService nodeTypeService;
@Autowired private FlowService flowService;
@@ -53,7 +51,7 @@ public void saveNodeData(List data) {
}
public void runNodeData(String flowId) {
- flowDataService.runFlowData(this.queryNodeData(flowId));
+ flowDataClient.runFlowData(this.queryNodeData(flowId));
}
public List queryNodeData(String flowId) {
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java
deleted file mode 100644
index 3b1051b3..00000000
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowInfoServiceImpl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.flow.eda.web.flow.status;
-
-import com.flow.eda.common.dubbo.api.FlowInfoService;
-import com.flow.eda.web.flow.FlowService;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-@DubboService(interfaceClass = FlowInfoService.class)
-public class FlowInfoServiceImpl implements FlowInfoService {
- @Autowired private FlowService flowService;
-
- @Override
- public String getFlowStatus(String flowId) {
- return flowService.findById(flowId).getStatus().name();
- }
-}
diff --git a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java
index 44150522..238df4a3 100644
--- a/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java
+++ b/flow-eda-web/src/main/java/com/flow/eda/web/flow/status/FlowStatusController.java
@@ -1,18 +1,23 @@
package com.flow.eda.web.flow.status;
import com.flow.eda.common.http.Result;
+import com.flow.eda.common.model.FlowData;
import com.flow.eda.web.flow.FlowService;
+import com.flow.eda.web.flow.node.data.NodeDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
/** 获取流程状态信息接口 */
@RestController
@RequestMapping("/api/v1/feign")
public class FlowStatusController {
@Autowired private FlowService flowService;
+ @Autowired private NodeDataService nodeDataService;
/**
* 获取流程状态
@@ -24,4 +29,15 @@ public class FlowStatusController {
public Result getFlowStatus(@RequestParam String flowId) {
return Result.of(flowService.findById(flowId).getStatus().name());
}
+
+ /**
+ * 获取流程状态
+ *
+ * @param flowId 流程id
+ * @return 返回流程当前状态
+ */
+ @GetMapping("/flow/data")
+ public Result> getFlowData(@RequestParam String flowId) {
+ return Result.of(nodeDataService.queryNodeData(flowId));
+ }
}
From bbb96e128754b4af665ad8154d30a540dbf8be4d Mon Sep 17 00:00:00 2001
From: Linxfeng <1538063845@qq.com>
Date: Tue, 4 Apr 2023 14:46:19 +0800
Subject: [PATCH 27/28] =?UTF-8?q?feat:=20=E5=9B=9E=E9=80=80=E7=89=88?=
=?UTF-8?q?=E6=9C=AC=E5=8D=87=E7=BA=A7=E5=B8=A6=E6=9D=A5=E7=9A=84=E6=A0=B7?=
=?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
flow-eda-vue/package.json | 11 +++---
flow-eda-vue/src/components/Header.vue | 6 +--
flow-eda-vue/src/components/Tags.vue | 5 ++-
.../src/components/editor/NodeDetail.vue | 1 -
.../src/components/editor/Toolbar.vue | 2 +-
flow-eda-vue/src/main.js | 10 ++---
flow-eda-vue/src/views/Flows.vue | 39 +++++++------------
flow-eda-vue/src/views/Logs.vue | 14 ++-----
flow-eda-vue/vite.config.js | 8 ++--
9 files changed, 36 insertions(+), 60 deletions(-)
diff --git a/flow-eda-vue/package.json b/flow-eda-vue/package.json
index 74931366..f8e2e4db 100644
--- a/flow-eda-vue/package.json
+++ b/flow-eda-vue/package.json
@@ -11,23 +11,22 @@
"axios": "0.24.0",
"click-outside-vue3": "^4.0.1",
"codemirror-editor-vue3": "^2.0.6",
- "element-plus": "^2.2.26",
- "element-theme-chalk": "^2.15.12",
+ "element-plus": "1.0.2-beta.52",
"jsplumb": "^2.15.6",
"less": "4.1.2",
"less-loader": "10.2.0",
"moment": "^2.29.1",
"panzoom": "^9.4.2",
"screenfull": "^6.0.1",
- "vue": "^3.2.45",
+ "vue": "^3.1.2",
"vue-json-viewer": "^3.0.4",
"vue-router": "^4.0.10",
"vuex": "^4.0.2"
},
"devDependencies": {
- "@vitejs/plugin-vue": "^4.0.0",
- "@vitejs/plugin-vue-jsx": "^3.0.0",
- "vite": "^4.0.3"
+ "@vitejs/plugin-vue": "^1.2.3",
+ "@vue/compiler-sfc": "^3.1.2",
+ "vite": "2.3.7"
},
"browserslist": [
"> 1%",
diff --git a/flow-eda-vue/src/components/Header.vue b/flow-eda-vue/src/components/Header.vue
index fe37fd54..fa819352 100644
--- a/flow-eda-vue/src/components/Header.vue
+++ b/flow-eda-vue/src/components/Header.vue
@@ -1,8 +1,8 @@