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

分布式事务 camel

带有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

分布式事务 camel

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

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

相关文章

比较Java REST文档框架

确定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中,我们将简要比较我们自己使用的REST Web服务的三种文档框架,以及它们如何与Spring框架(这是Foreach最常使用的Java框架)集成。 这些是RESTful API建模语言&#xff0…

jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏

原标题:《三国志英杰传》到底是怎样的一款游戏介绍作为PC平台上经典的战棋策略类游戏,英杰传系列可谓把这一类型游戏在战略性和资源获取上的精髓发挥的淋漓尽致。系列初代的《三国志英杰传》诞生在1995年的DOS系统上,虽然我接触英杰传时已经是…

jvm 内存镜像_镜像镜像–使用反射在运行时查看JVM内部

jvm 内存镜像开发人员:Takipi会告诉您何时新代码在生产中中断– 了解更多 我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射。 它是Java和Scala编程的主要方面,它使我们使用的库可以与我们的代码进行交互,而无需对其进行硬…

谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!

有没有想过圣诞老人如何为世界各地的孩子们送上节日礼物? 有20亿个孩子,每个孩子都有自己的愿望清单,他会在24小时内完成。 这意味着每个孩子平均需要43微秒,他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我会透露这个秘密…

php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本

$ttime();echo date("Y-m-d H:i:s",$t);第一个参数的格式分别表示:a - "am" 或是 "pm"A - "AM" 或是 "PM"d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"D - 星期几…

play框架配置 拦截器_如何使用Play框架为https配置SSL证书

play框架配置 拦截器我花了几个小时试图使它起作用,最后,问题是我自己没有使用keytool生成CSR(证书请求)。 当我尝试通过https访问Play时,我一直收到此错误: javax.net.ssl.SSLPeerUnverifiedException&a…

matlab 球坐标绘图,MATLAB绘制地图

1使用向量绘制地图1.1绘制全球海岸线向量数据可以表示一个地图。这种向量存在的形式是一系列的经纬度或投影坐标对,它们代表一个点集、一个线条或者多边形。例如,描绘出行政区域边界的点、公路系统、城市的中心或者以上三个集合放在一起,都可…

php 有 stringbuffer,String、StringBuffer、StringBulider三者介绍

三者都实现了CharSequence接口,因此CharSequence可认为是一个字符串的协议接口1.String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁;我们常常定义的时候 S…

php生成网页按钮,JavaScript实现自动生成网页元素功能(按钮、文本等)_javascript技巧...

创建元素的方法:1、利用createTextNode()创建一个文本对象2、利用createElement()创建一个标签对象3、直接利用容器标签中的一个属性:innerHTML-----本质上改该标签容器中的“html代码”,不是我们认为的对象树的操作详解代码:这是…

adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列

adf 自动输稿器大家好。 继续进行ADF MySQL解决方法系列,今天我们将看到需要做些什么才能将MySQL PK自动增量列与ADF实体PK属性一起使用。 如果使用的是Oracle数据库,则可以使用oracle.jbo.domain.DBSequence以及序列和触发器来立即进行操作。 为简单起…

探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

最近引起我注意的一个有趣且充满希望的开源项目是Spline ,它是由Absa维护的Apache Spark的数据沿袭跟踪和可视化工具。 该项目由两部分组成:一个在驱动程序上工作的Scala库,该驱动程序通过分析Spark执行计划来捕获数据沿袭,并提供…

高性能mysql 聚簇索引,高性能MySQL笔记-第5章Indexing for High Performance-005聚集索引...

一、聚集索引介绍1.什么是聚集索引?InnoDB’s clustered indexes actually store a B-Tree index and the rows together in the same structure.2.为什么一张表只能一个聚集索引?When a table has a clustered index, its rows are actually stored in …

PHP应用GD2函数填充几何图形,使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)...

使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)本篇主要讲解使用GD2函数实现几何图形的绘制,首先我们需要的事创建一个图像,在之前的文章中我们就说过了,创建图像是所有图像操作的第一步,然后再背景上根据坐标点绘制图形轮…

API测试和自动化101:基本指南

API代表A pplication P AGC软件我覆盖整个院落。 通常,API用于通过使用任何通信方式来促进两个不同应用程序之间的交互。 在网络上使用API​​时,我们将其称为“ Web服务”。 最近,API已成为编程的Struts。 与在应用程序中一样,编…

oracle数据库安装HotSpot,安装Oracle数据库软件遭遇诡异的HotSpot Virtual Machine Error : 11报错...

虽然也装了很多次的数据库了,可是偶尔还是会碰见一些很无语的错误,前两天在RHEL5.0上安装Oracle 10g 10.2.0.1,起图形后点击下虽然也装了很多次的数据库了,可是偶尔还是会碰见一些很无语的错误,前两天在RHEL5.0上安装O…

linux结束所有任务命令行,Linux基础命令(15)定时任务

释放双眼,带上耳机,听听看~!crontadLinux定时任务Crontab命令详解linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设…

如何修复无效的目标版本:Maven Build中的1.7、1.8、1.9或1.10错误

如果您正在使用Maven构建Java项目,可能是在Eclipse中,或者是通过运行mvn install在命令提示符下构建的,并且构建失败并显示诸如“无效的目标发行版:1.7”或“无效的目标发行版:1.8”之类的错误,那么您来了到…

Linux查看时间段文件,Linux查看特定时间段内修改过的文件

一.Linux系统日志的一些信息,日志配置文件syslog.conf系统日志一般都存在/var/log下常用的系统日志如下:核心启动日志:/var/log/dmesg系统报错日志:/var/log/messages邮件系统日志:/var/log/maillogFTP系统日志:/var/log/xferlog安全信息和系统登录与网络连接的信息…

使用ClickHouse UDF与OpenAI模型集成

本文字数:14683;估计阅读时间:37 分钟 作者:Dale McDiarmid 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shenzhen User Group第1届 Meetup 火热报名中&#x…

使用Spring Boot和Vue.js构建一个简单的CRUD应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 在本教程中,您将使用Vue.js作为客户端并将Spring Boot作为资源服务器来构…