使用Camel在Amazon上构建分布式工作流应用程序

带有SNS-SQS的管道
工作流由按动态条件确定的特定顺序执行的独立任务组成。 工作流通常代表业务流程,例如电子商务商店中的订单处理步骤。 Amazon Web Services提供了各种工具来构建分布式和可扩展的工作流应用程序。 构建此类应用程序的一种方法是使用主题和队列来连接工作流程中的不同步骤。 然后,我们可以使用发布/订阅,竞争的使用者和其他机制来扩展我们的应用程序,甚至最简单的应用程序都将具有类似于以下内容的形状:

AWS SNS-SQS-支持流程(2)
流水线的每个步骤都通过队列连接到下一个步骤,并且每个步骤执行一些操作并决定下一步是什么。 此外,使用SNS / SQS还涉及其他一些底层任务: –序列化/反序列化数据 –确保SQSmessages的一致性(FIFO顺序) –确保不超过消息大小 –发明某种审计支持 –订户排队到主题,分配权限 –管理DLQ 最后,它可以工作,但是克服这些技术挑战所需的时间与编写可提供业务价值的实际代码所花费的时间一样多。

简单的工作流程服务
另一方面,SWF提供了用于编写分布式异步工作流应用程序的更高级别的API。 它会自动对数据进行序列化/反序列化,管理应用程序状态,提供可审核性,确保强一致性,支持多个版本。 最重要的是,它确保工作流程编排和业务逻辑执行分开。 任何典型的SWF应用程序都具有以下构造块:

AWS SWF-支持流程(3)
用SWF术语来说,工作流是实际的模板,描述了流程应遵循的不同步骤。 而工作流执行就是该模板的运行。 Starter –可以启动,停止和与工作流执行交互的过程。 决策者 –协调和决定工作流程执行下一步的过程。 工作者 –执行特定类型任务的过程。 SWF控制台 –提供完整的可见性和执行控制权。 工作流执行示例可以通过以下步骤进行:启动程序启动工作流执行,SWF接收该工作流,询问决策者下一步是什么,然后根据该决定将任务传递给适当的活动工作者。 一旦收到了来自活动工作人员的结果,SWF就会再次向决策者询问下一步,并且取决于响应是否可以执行其他工作人员。 该流程一直持续到决策者答复工作流程完成为止。 您可以看到决策者如何协调工作流的每个步骤以及活动工作人员如何执行各个任务。 所有这些都由SWF管理,并且可以在任何阶段进行审核。

为什么要使用骆驼?
亚马逊提供的Java客户端通过使用注释生成代理类来访问SWF服务来工作。 生成和使用代理类以及从启动器到决策器以及从决策器到活动工作者的依赖关系的整个过程并不是很愉快。 还有什么比使用骆驼路线进行编排和使用另一条路线进行实际活动更好的呢? 结果是现在在Camel master中的Camel SWF组件。 Camel-swf组件具有两种类型的端点: 工作流活动 。 工作流生产者允许我们启动,终止,取消,发信号,获取状态或检索工作流执行的整个执行历史。 在我们的图中,它表示启动器。 这是如何开始执行工作流程的示例:

from("direct:start").setHeader(SWFConstants.OPERATION, constant("START")).log("Starting a workflow task ${body}").to("aws-swf://workflow?domainName=demo&workflowList=demo-flow&version=1.0&eventName=processWorkflows");

工作流使用者是决定者。 它从SWF服务接收决策任务,并计划执行活动任务或指示工作流执行已完成。 这是一条无状态的确定性路线,只有工作才能安排任务:

from("aws-swf://workflow?domainName=demo&workflowList=demo-flow&version=1.0&eventName=processWorkflows").log("Received a workflow task ${body}").filter(header(SWFConstants.ACTION).isEqualTo(SWFConstants.EXECUTE_ACTION)).to("aws-swf://activity?domainName=demo&activityList=demo-activity&version=1.0&eventName=processActivities");

活动端点允许我们与活动任务进行交互。 活动生产者用于安排活动任务,并且只能在决策者路线(实际上是决策者线程)中使用。 这是因为只有决策者才能安排活动任务。 我们图中必须提供实现的最后一个框是活动工作程序,可以使用活动使用者来创建活动工作程序。 该端点将从SWF接收活动任务,执行任务并将结果返回给SWF。 这是实际执行业务逻辑的部分:

from("aws-swf://activity?domainName=demo&activityList=demo-activity&version=1.0&eventName=processActivities").log("Received Activity task ${body}").setBody(constant("1"));

因此,任何SWF应用程序都由启动执行程序的启动程序(工作流生产者),接收决策任务并计划活动任务的决策者(工作消费者)(使用活动生产者)和执行任务的活动工作者(活动消费者)组成。 这些端点之间的通信是异步的,一致的,并且由SWF服务进行管理。
它不是最容易使用的组件,但是它具有简单且可扩展的体系结构。 PS:感谢我的前经理S. Wheeler让我将此组件贡献给Camel社区。

参考:来自OFBIZian博客的JCG合作伙伴 Bilgin Ibryam 使用Camel在Amazon上构建分布式工作流应用程序 。

翻译自: https://www.javacodegeeks.com/2013/12/building-distributed-workflow-applications-on-amazon-with-camel.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

表单外部提交

外部按钮提交&#xff1a; html&#xff1a; <form method"post" name"sort">.......</form> <button type"button" class"btn btn-sm btn-azure btn-addon" οnclick"javascript:document.sort.submit()"&…

使用stylus

1. 首先确保 node npm 环境一切正常。 2. 全局安装 stylus&#xff1a; 在命令行中&#xff1a; npm i styluslatest -g 3. 此时可以创建 .styl 文件&#xff0c; 并进行编辑。 4. 使用命令 将 .styl 文件 编译为 .css 文件&#xff1a; stylus -c path/to/in…

mysql 高版本检索外键_第05期:外键到底能不能用?

外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性。外键在大部分企业写的开发规范里会直接规避掉&#xff01;外键有优缺点&#xff0c;也并不是说每种场景都不适用&#xff0c;完全没有必要一刀切。外键到底能不能用&#xff1f;下面会针对…

python重启路由器_Python3控制路由器——使用requests重启极路由.py

通过本文给大家介绍Python3控制路由器——使用requests重启极路由.py的相关知识&#xff0c;代码写了相应的注释&#xff0c;以后再写成可以方便调用的模块。用fiddler抓包可以看到很多HTTP头&#xff0c;经过尝试发现不是都必须的。Upgrade-Insecure-Requests:1,#必要项&#…

从Ant Build演进Gradle Build:导入Ant Build文件

在大型项目上更改构建系统可能很困难并且需要大量工作。 幸运的是&#xff0c;对于那些将Ant版本迁移到Gradle版本的人&#xff0c;Gradle提供了特别方便的机制来促进这种迁移 。 由于Gradle基于Groovy构建&#xff0c;并且Groovy通过AntBuilder包含内置的Ant支持&#xff0c;因…

洛谷——P2719 搞笑世界杯

P2719 搞笑世界杯 题目描述 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋友欣然去购买球票.不过搞笑世界杯的球票出售方式也很特别,它们只准备了两种球票…

HTML5 之 简单汇总

参考&#xff1a; HTML5的十大新特性 前端面试必备之html5的新特性 HTML5 主要内容&#xff1a;语义化、增强型表单、多媒体标签、Canvas、SVG、地理定位、拖放API、Web Worker、Web Storage、WebSocket、HTML 5 应用程序缓存 1.语义化元素 1.1结构元素 标签描述article表示与上…

个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...

项目简介项目源码&#xff1a;麻烦转发后关注JAVA梦想口服液私信回复【源码】即可获取&#xff01;本系统是基于ThymeleafSpringBootMybatis。是非常标准的SSM三大框架(SpringBoot就是一个大框架&#xff0c;里面包含了许多的东西&#xff0c;其中Spring就是最核心的内容&#…

HTML速查列表

HTML速查列表 HTML基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head> <body> 可见文本... </body> </html> 基本标签&#xff08;Basic Tags&#xff09; <h1>最大的标题</h1> &l…

被问到有没有内核开发经验_一个人就是一个开发团队!成电硬核毕业生自制迷你电脑走红!...

△小视频近日&#xff0c;一段长3分多钟的小视频在B站突然爆红&#xff0c;不仅登上首页&#xff0c;获得超过200万的播放量&#xff0c;还被众多观众“膜拜”。有网友在评论区说&#xff1a;“其实这些东西吧&#xff0c;外行看起来很牛&#xff0c;但我这种内行看起来&#x…

使用英特尔性能计数器调整垃圾收集

介绍 我不得不承认我很震惊。 确实&#xff0c;当我意识到这个出现的日历帖子将涉及垃圾收集时&#xff0c;我感到非常震惊。 GC的主题引起了Java倡导者和那些认为内存管理应该是手动的人的热情。 撰写了许多文章&#xff0c;内容涉及看起来奇怪的命令行参数中的细微变化&#…

matlab2010a连接mysql_MATLAB2010a+OpenCV2.3.1+VS2010运行TLD

出现matlab不显示C编译器的原因主要还是当前Matlab版本相对于VS来说不够新&#xff0c;比如14版的肯定支持10的VS。 本文引用地址&#xff1a; http://blog.csdn.net/shanpohe/article/details/7596401 http://blog.sina.com.cn/s/blog_adfd55190101ejvr.html TLD(Tracking Lea…

理解总结篇—List、Set、Map

List是存储对象的容器&#xff0c;可以存储任意类型的对象且长度可变&#xff0c;List的存储对象是有顺序的&#xff0c;可重复的。 <1> List的接口框架 ArrayList实现类通过数组实现&#xff0c;在向集合中增加或删除时&#xff0c;需要对集合进行增容和拷贝&#xff0c…

SpringBoot+Redis使用jedis实现了对Redis基本类型操作超全工具类

这编文章主要介绍了springboot整合redis&#xff0c;使用jedis实现了对Redis基本类型操作&#xff0c;一些redis的常用命令总结到了一个公共的工具类中,其中使用了fastjson作为了序列化工具。 注&#xff1a;使用了 jdk 1.8 新特性 &#xff0c;jdk版本需要>1.8 一.添加mave…

更改span标签样式_CSS 内嵌样式

前面一节我们讲了行内样式&#xff0c;但是行内样式的缺点就是样式不能重用。例如当有好多个 标签&#xff0c;我们希望所有的 标签的样式都一致&#xff0c;那么需要在每个标签中都写一遍&#xff0c;这么会很麻烦&#xff0c;也会增加很多代码。那么为了解决这个问题&#…

js 函数节流

//es6语法export function debounce(func, delay) {let timer//返回一个函数&#xff0c;并拿到参数return function (...args) {if (timer) {clearTimeout(timer)}timer setTimeout(() > {func.apply(this, args)}, delay)} } //简单实现var debounce function(idle, act…

mysql 6安装当前密码_MySQL8.0 安装踩坑指南

就在昨天上午&#xff0c;刚为云服务器安装好Apache2.4.33和PHP7.2.4环境&#xff0c;准备再来一个最新的MySQL5.7.22。寻找5.7版本的rpm包时下到mysql80xxx.rpm&#xff0c;看人家的教程是mysql57&#xff0c;难道80是MySQL出出…出了8版&#xff0c;一搜新闻2个小时前MySQL发…

如何用Java编写最快的表达式评估器之一

当然&#xff0c;标题有点吸引人&#xff0c;但确实如此&#xff08;您当然不相信自己没有伪造自己的基准&#xff0c;但这是另一回事了&#xff09;。 因此&#xff0c;上周我正在寻找一个小型且可用的库来评估数学表达式。 我几乎直接偶然发现了这个stackoverflow帖子 。 推…

Elasticsearch环境搭建和介绍(Windows)

一、Elasticsearch介绍和安装 1.1 介绍 Elastic Elastic官网&#xff1a;https://www.elastic.co/cn/ Elastic有一条完整的产品线&#xff1a;Elasticsearch、Kibana、Logstash等&#xff0c;前面说的三个就是大家常说的ELK技术栈。 Elasticsearch Elasticsearch官网&#xff1…

python 银行业务系统程序编程写_python多线程实现代码(模拟银行服务操作流程)

1.模拟银行服务完成程序代码目前&#xff0c;在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统&#xff0c;该系统完全模拟了人群排队全过程&#xff0c;通过取票进队、排队等待、叫号服务等功能&#xff0c;代替了人们站队的辛苦。排队叫号软件的具体操作流程为&…