前言
最近学习了一段时间工作流Activiti开源框架,在Activiti6和Activiti7都体验了一下,因为Activiti6.x是一个比较稳定的版本。而Activiti7.x虽然很久就出了,但是一直在更新,目前小版本问题和不稳定性还是比较多,但是作为比较喜欢尝鲜的我来说,我还是在公司的项目中使用的是Activiti 7.x,由于需求上不需要使用SpringSecurity,所以也没有使用Activiti 7 版本的那两个新的API,但是在学习的过程使用了那两个新的API,还是非常的简便好用的。目前公司的工作流需求已经完成了,我也是回过头来再更加深入连接下Activiti。
Activiti7 是分成了两部分:Activiti Core
和Activiti Cloud
。之前一直使用的也是Activiti Core。所以这次来学习使用一下Activiti Cloud。
因为Activiti是国外的网站,而且官网的文档也没有个比较稳定的版本,打卡网页也比较慢。刚开始我在网上下载了一个PDF的文档,按照文档来部署发现许多地方都已经变化了,导致进行到一半就无法继续下去了,这也足矣说明Activiti7的更新之快和年度跨越之久。最后我还是按照官网最新的文档来进行部署了一下,很多地方确实没有做深入的理解只能简单的翻译,不过最后我还是搭建成功了。
职责划分
Activiti Cloud 将系统分成了多个组成,也是为了多个服务:
- Activiti云运行时捆绑包
- Activiti云查询服务
- Activiti云审计服务
- Activiti云连接器服务
这些工作的主要目的其实就是为了上云,减少对Activiti依赖的耦合,需要使用Activiti的系统只需要通过调用http接口的方式来实现工作流能力的整合,将工作流业务托管上云。
开始部署
Activiti Cloud 是一组云本机组件,从零开始设计到在分布式环境中工作。所以要完成整个部署需要部署多个组件。
Activiti 云包括 5 个基础构建基块:
- Activiti 云运行时捆绑包
- 活动云查询
- 活动云审计
- Activiti 云连接器
- Activiti 云通知服务 (GraphQL)
Activiti Cloud 推荐使用k8s集群来部署该项目,所以他推荐了两个选项:使用亚马逊云和使用谷歌云;因为只是作为学习尝试,我们也可以使用docker在自己本机上部署,我也是使用的这种方式。
官网Guide
硬件配置
需要为Docker 虚拟机分配至少4个CPU内核和8 Gb RAM
软件条件
- 安装Docker for Desktop 或 Docker Toolbox
- 安装Docker-compose
- 安装 GNU Make。通常Linux和Mac系统已经安装了, window系统使用Chocolatey 来安装.
- 安装 Git Bash 终端 . 通常Linux和Mac系统已经安装了. window可以使用 Chocolatey Git Install 来安装。
下载示例源码
git clone https://github.com/Activiti/activiti-cloud-examples
cd activiti-cloud-examples/docker-compose
│ Activiti v7 REST API.postman_collection.json # postman api接口文件
├─docker # docker方式,好像官网没有这方面使用说明了
│ │ enabled_plugins
│ │ frontend-docker-compose.yml # 前端UI模块
│ │ infrastructure-docker-compose.yml # 基础模块
│ │ modelling-docker-compose.yml # 流程图绘制管理模块
│ │
│ └─apps
│ apps.json
│ default-app.json
└─docker-compose # docker-compose 方式
.env # 配置文件
activiti-realm.json # realm 配置文件
docker-compose.yml
Dockerfile
enabled_plugins
Makefile
nginx.conf
README.md
使用docker启动服务
配置hosts文件:127.0.0.1 activiti-cloud-sso-idm
cd docker
docker-compose -f infrastructure-docker-compose.yml up -d # 启动基础模块
docker-compose -f modelling-docker-compose.yml up -d # 启动流程图模块
docker-compose -f frontend-docker-compose.yml up -d
➜ docker-compose -f infrastructure-docker-compose.yml up -d
Creating network "docker_default" with the default driver
Creating docker_activiti-cloud-registry_1 ... done
Creating docker_rabbitmq_1 ... done
Creating docker_activiti-keycloak_1 ... done
Creating docker_activiti-cloud-gateway_1 ... done
➜ docker-compose -f modelling-docker-compose.yml up -d
WARNING: Found orphan containers (docker_activiti-keycloak_1, docker_activiti-cloud-registry_1, docker_activiti-cloud-gateway_1, docker_rabbitmq_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating docker_modeling-app_1 ... done
➜
访问KeyCloak
访问 http://activiti-cloud-sso-idm:8180/auth/ 可以打开keycloak
- 点击
Administration Console
打开控制台,输入admin/admin 登录
这是Activiti Cloud 的鉴权中心,这里主要管理了用户体系和用户权限以及应用。
访问Modeling
访问8080端口。
好吧,不知道为什么失败了....
使用docker-compose
启动服务
修改配置文件
activiti-cloud-examples/docker-compose/.env 文件
DOCKER_IP=192.168.1.88 (这里修改成你电脑的IP地址,不要使用127.0.0.1和localhost)
VERSION=7.1.0-M11
KEYCLOAK_REALM=activiti
KEYCLOAK_RESOURCE=activiti
启动流程图编辑器 Modeling
➜ make modeler
make nginx/up
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d nginx
Starting nginx ... done
make[1]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make keycloak/up
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d keycloak
nginx is up-to-date
Starting keycloak ... done
make[1]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
ECHO 处于关闭状态。
ECHO 处于关闭状态。
Keycloak path 192.168.1.33/auth
ECHO 处于关闭状态。
make activiti-cloud-modeling activiti-cloud-modeling-backend
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make activiti-cloud-modeling/up
make[2]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d activiti-cloud-modeling
Starting activiti-cloud-modeling ... done
make[2]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make activiti-cloud-modeling-backend/up
make[2]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d activiti-cloud-modeling-backend
Starting activiti-cloud-modeling-backend ... done
make[2]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make[1]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
ECHO 处于关闭状态。
ECHO 处于关闭状态。
Modeling app: http://192.168.1.33/modeling
ECHO 处于关闭状态。
访问keycloak: http://$DOCKER_IP//auth/ 默认账号是 admin/admin
访问modeling: http://$DOCKER_IP/modeling。默认账号:modeler/password
启动应用
➜ make application
make nginx/up
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d nginx
nginx is up-to-date
make[1]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make keycloak/up
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d keycloak
nginx is up-to-date
keycloak is up-to-date
make[1]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
ECHO 处于关闭状态。
ECHO 处于关闭状态。
Keycloak path 192.168.1.33/auth
ECHO 处于关闭状态。
make rabbitmq/up
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d rabbitmq
rabbitmq is up-to-date
make[1]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make example-runtime-bundle example-cloud-connector activiti-cloud-query activiti-cloud-audit activiti-cloud-notifications-graphql
make[1]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make example-runtime-bundle/up
make[2]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d example-runtime-bundle
Starting docker-compose_activiti-postgres_1 ...
rabbitmq is up-to-date
nginx is up-to-date
Starting docker-compose_activiti-postgres_1 ... done
Starting example-runtime-bundle ... done
make[2]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make example-cloud-connector/up
make[2]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d example-cloud-connector
rabbitmq is up-to-date
nginx is up-to-date
keycloak is up-to-date
Starting example-cloud-connector ... done
make[2]: Leaving directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
make activiti-cloud-query/up
make[2]: Entering directory 'D:/project/demo/activiti-cloud-examples/docker-compose'
docker-compose up -d activiti-cloud-query
nginx is up-to-date
docker-compose_activiti-postgres_1 is up-to-date
rabbitmq is up-to-date
keycloak is up-to-date
Starting activiti-cloud-query ... done
➜
启动之后,可以将
activiti-cloud-examples / Activiti v7 REST API.postman_collection.json
导入到Postman
中
配置Postman
添加全局变量
变量名 | 变量值 | 变量说明 |
---|---|---|
gateway | http://192.168.1.33 | 网关地址,即你自己电脑的IP(DOCKER_IP) |
idm | http://192.168.1.33 | 鉴权地址,identity Manager地址 |
realm | activiti | .env文件中填写的 KEYCLOAK_REALM |
开始测试
完成上面的步骤之后,就可以先调用 keycloak中的接口获取token(访问凭证)。然后就可以调用其他接口了。
总结
总得来说就是体验下ActivitiCloud, 目前相关的文档记录的比较少,可能是国内使用的比较少或者是还不够稳定吧。记录的原因其实也是自己在部署示例的过程中遇到了很多坑,包括docker启动服务的时候modeling不能用带带。总得来说,虽然只是浅尝辄止,但是可能大致了解了Activiti7到底是想干嘛的吧。