Camunda 8 流程自动化平台
项目标题与描述
Camunda 8 是一个开源的流程自动化平台,提供以下核心组件:
- Zeebe:云原生流程引擎
- Tasklist:人工任务管理系统
- Operate:流程运维监控工具
- Identity:统一认证授权服务
- Optimize:流程分析与优化工具
平台支持BPMN 2.0标准,提供REST和gRPC API接口,可用于构建分布式工作流系统。
功能特性
- 流程引擎:高性能、分布式的Zeebe流程引擎
- 决策引擎:支持DMN标准的决策自动化
- 任务管理:人工任务分配与跟踪
- 流程监控:实时监控和故障排查
- 多租户支持:完善的租户隔离机制
- 安全认证:OAuth2/OIDC集成
- 弹性扩展:云原生架构支持水平扩展
- 连接器生态:丰富的系统连接器
安装指南
快速启动(使用C8 Run)
# 下载最新版本
curl -LO https://github.com/camunda/camunda/releases/download/8.5.7/zbctl
# 启动所有服务
./c8run start
系统要求
- Java 11+
- Elasticsearch/OpenSearch (可选)
- 至少4GB内存
Docker Compose部署
version: '3'
services:
zeebe:
image: camunda/zeebe:8.5.7
ports:
- "26500:26500"
operate:
image: camunda/operate:8.5.7
ports:
- "8080:8080"
使用说明
创建流程实例
ZeebeClient client = ZeebeClient.newClientBuilder()
.gatewayAddress("localhost:26500")
.build();
client.newCreateInstanceCommand()
.bpmnProcessId("order-process")
.latestVersion()
.variables("{\"orderId\": \"123\"}")
.send()
.join();
处理人工任务
client.newActivateJobsCommand()
.jobType("payment")
.maxJobsToActivate(3)
.workerName("payment-worker")
.timeout(Duration.ofMinutes(5))
.send()
.join();
REST API示例
# 获取流程定义
GET http://localhost:8080/v1/process-definitions
# 创建实例
POST http://localhost:8080/v1/process-instances
{
"bpmnProcessId": "order-process",
"variables": {"orderId": "123"}
}
核心代码
认证服务实现
@Service
@ConditionalOnAuthenticationMethod(AuthenticationMethod.OIDC)
public class CamundaJwtAuthenticationConverter
implements Converter<Jwt, AbstractAuthenticationToken> {
private final CamundaOAuthPrincipalService principalService;
public AbstractAuthenticationToken convert(Jwt jwt) {
return new CamundaJwtAuthenticationToken(
jwt,
new CamundaJwtUser(
jwt,
principalService.loadOAuthContext(jwt.getClaims())
),
jwt.getTokenValue(),
authorities
);
}
}
流程引擎客户端
public interface ZeebeClient {
CreateInstanceCommandStep1 newCreateInstanceCommand();
ActivateJobsCommandStep1 newActivateJobsCommand();
@ExperimentalApi
PublishMessageCommandStep1 newPublishMessageCommand();
}
任务处理过滤器
public class AdminUserCheckFilter extends OncePerRequestFilter {
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) {
if (!hasConfiguredAdminUser()) {
response.sendRedirect("/identity/setup");
return;
}
chain.doFilter(request, response);
}
}
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码