Cadence是一个开源的无故障状态代码平台和工作流引擎,专为解决与第三方 API、内部服务和长期运行的业务流程进行复杂交互的挑战。Cadence 为使用需要容错的基于微服务的架构以及包含无数多步骤并发工作流或与多个第三方 API 交互的应用程序的开发团队提供了很多价值。
Cadence 将应用程序的整个状态保存在与任何特定进程无关的持久虚拟内存中。存储的应用程序状态包括用户定义活动的所有调用参数和返回结果。然后,它使用该信息来赶上并重播被中断的工作流。
Cadence 拥有使开发人员能够使用 Java、Go、Python 和 Ruby 等流行语言创建和协调工作流的库。Cadence 服务(例如工作人员)在很大程度上是无状态的,并利用数据存储来实现任务/工作流的持久性。支持的存储选项包括开源 Cassandra 和 MySQL/PostgreSQL,并且适配器可用于任何具有多行单分片事务的数据库。还提供多种服务部署模型。例如,Uber 使用由数百个应用程序共享的多租户 Cadence 集群。
Cadence 的优势体现在以下用例中:
要开始使用 Cadence,请获取Cadence 服务器或Docker 映像的GitHub 存储库。
在此处获取最新的 Cadence Java 客户端。将其作为依赖项包含在您的 Java 项目中:
通过向连接到 Cadence 服务的工作人员注册,将此工作流链接到 Cadence 框架(工作人员默认连接到本地运行的服务)。
| public static void main(String[] args) { WorkflowClient workflowClient = WorkflowClient.newInstance( new WorkflowServiceTChannel(ClientOptions.defaultInstance()), WorkflowClientOptions.newBuilder().setDomain(DOMAIN).build()); // Get worker to poll the task list. WorkerFactory factory = WorkerFactory.newInstance(workflowClient); Worker worker = factory.newWorker(TASK_LIST); worker.registerWorkflowImplementationTypes(HelloWorldImpl.class); factory.start();} |
现在,通过运行工作程序使用 CLI 执行 Hello World 工作流。
| > docker run --network=host --rm ubercadence/cli:master --do test-domain workflow start --tasklist HelloWorldTaskList --workflow_type HelloWorld::sayHello --execution_timeout 3600 --input \"World\" Started Workflow Id: bcacfabd-9f9a-46ac-9b25-83bcea5d7fd7, run Id: e7c40431-8e23-485b-9649-e8f161219efe |