亚马逊Simple Worklfow服务的骆驼演示

在上一篇文章中,我解释了为什么AWS SWF服务很好,并宣布了新的Camel SWF组件。 现在,组件文档已准备就绪, 这是一个简单的完全可用的演示。 它包含三个独立的独立骆驼路线:
工作流生产者允许我们与工作流进行交互。 它可以启动新的工作流程执行,查询其状态,向正在运行的工作流程发送信号,或者终止并取消它。 在我们的演示中,WorkflowProducer启动了一条路线,该路线安排了 10个工作流程执行,每个执行都接收一个数字作为参数。

package com.ofbizian.swf.demo;import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;public class WorkflowProducer {public static String COMMON_OPTIONS ="accessKey=XXX"+ "&secretKey=XXX"+ "&domainName=demo"+ "&workflowList=demo-wlist"+ "&activityList=demo-alist"+ "&version=1.0"+ "&clientConfiguration.endpoint=swf.eu-west-12.amazonaws.com";public static void main(String[] args) throws Exception {Main main = new Main();main.enableHangupSupport();WorkflowProducerRoute route = new WorkflowProducerRoute();main.addRouteBuilder(route);main.run();}static class WorkflowProducerRoute extends RouteBuilder {@Overridepublic void configure() throws Exception {from("timer://workflowProducer?repeatCount=10").setBody(property("CamelTimerCounter")).to("aws-swf://workflow?" + COMMON_OPTIONS + "&eventName=calculator").log("SENT WORKFLOW TASK ${body}");}}
}

安排好工作流程执行后,我们需要一个流程来决定下一步的工作。 在Camel中,这是使用工作流使用者完成的。 工作流程使用者代表工作流程逻辑。 启动后,它将开始轮询工作流程决策任务并对其进行处理。 除了处理决策任务之外,工作流使用者路由还将接收信号(从工作流生产者发送)或状态查询。 工作流使用者的主要目的是安排活动任务以使用活动生产者执行。 实际上,只能从工作流程使用者启动的线程中安排活动任务。

package com.ofbizian.swf.demo;import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.aws.swf.SWFConstants;
import org.apache.camel.main.Main;public class WorkflowConsumer {public static void main(String[] args) throws Exception {Main main = new Main();main.enableHangupSupport();WorkflowConsumerRoute route = new WorkflowConsumerRoute();main.addRouteBuilder(route);main.run();}static class WorkflowConsumerRoute extends RouteBuilder {@Overridepublic void configure() throws Exception {from("aws-swf://workflow?" + WorkflowProducer.COMMON_OPTIONS + "&eventName=calculator").choice().when(header(SWFConstants.ACTION).isEqualTo(SWFConstants.SIGNAL_RECEIVED_ACTION)).log("Signal received ${body}").when(header(SWFConstants.ACTION).isEqualTo(SWFConstants.GET_STATE_ACTION)).log("State asked ${body}").when(header(SWFConstants.ACTION).isEqualTo(SWFConstants.EXECUTE_ACTION)).setBody(simple("${body[0]}")).log("EXECUTION TASK RECEIVED ${body}").filter(simple("${body} > 5")).to("aws-swf://activity?" + WorkflowProducer.COMMON_OPTIONS + "&eventName=incrementor");}}}

我们的演示决策器中的逻辑很简单:如果传入的参数大于5,我们将计划执行任务。 否则,由于没有其他任务要执行,因此工作流将完成。 请注意,它还具有处理信号和状态查询事件的分支。

我们的分布式(因为它包含三个独立的应用程序)工作流应用程序的最后一个选择是ActivityConsumer,它实际上执行一些计算。 它具有最简单的实现:递增给定参数并返回它。

package com.ofbizian.swf.demo;import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;public class ActivityConsumer {public static void main(String[] args) throws Exception {Main main = new Main();main.enableHangupSupport();ActivityConsumerRoute route = new ActivityConsumerRoute();main.addRouteBuilder(route);main.run();}static class ActivityConsumerRoute extends RouteBuilder {@Overridepublic void configure() throws Exception {
from("aws-swf://activity?" + WorkflowProducer.COMMON_OPTIONS + "&eventName=incrementor").setBody(simple("${body[0]}")).log("RECEIVED ACTIVITY TASK ${body}").setBody(simple("${body}++"));}}
}

运行此演示所需要做的只是创建适当的工作流域并将密钥/秘密添加到路由中。

参考:来自OFBIZian博客的JCG合作伙伴 Bilgin Ibryam提供的有关Amazon Simple Worklfow服务的骆驼演示 。

翻译自: https://www.javacodegeeks.com/2014/01/a-camel-demo-for-amazons-simple-worklfow-service.html

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

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

相关文章

CODEVS 1205 单词反转

嗯.... 这道题看起来挺像一个字符串的题,但其实却错了,它实质上却用了一个栈进行了一个模拟(当然还有一种鬼畜的做法,下面也会介绍到..... 首先先看题: 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题…

python 定义函数为什么有个长线_关于格式化:如何在Python中打破这条长线?

如何设置这样的长行格式?我想让它的宽度不超过80个字符:logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes[url]], video.title))这是我最好的选择吗?url "Skipping …

NodeJS中resolve添加地址无效

今天一个朋友在群里问了这样一个问题,他使用url.resolve()添加地址无效,我看了一下,发现是他没有注意细节, resolve可以在二级目录下增加,他使用的时候只是一级目录,所以添加会有问题。他使用的是如下这种…

centos配置jdk的环境变量

1、首先呢,centos下的JDK环境配置分两种情况,一直是root用户级别的jdk配置,另一种是其他用户组级别的配置。这里讲解的是root用户级别的配置。 我们已经下载解压好了jdk的目录。如下 2、编辑环境变量的配置文件: vi /etc/profile…

Python之字符串转换为日期、结合时区的日期操作

一、字符串转换为日期 方法一 s 2019-01-20 print(datetime.strptime(s, %Y-%m-%d)) # 2019-01-20 00:00:00 方法二 def parse_ymd(s):year_s, mon_s, day_s s.split(-)return datetime(int(year_s), int(mon_s), int(day_s)) s 2019-01-20 res parse_ymd(s) print(res) …

项目学生:带有Jersey的Web服务客户端

这是Project Student的一部分。 其他职位包括带有Jersey的Webservice Client , 业务层和带有Spring Data的持久性 。 RESTful Web应用程序洋葱的第一层是Web服务客户端。 它可以用来模仿包含AJAX内容的网页,也可以被webapp的编程用户用来模仿。 注意&am…

华为摄像机搜索软件_别人的终点华为的起点!用普惠AI守护城市安全

看点:华为好望的求索启示录!如何让老百姓用上实惠的AI?你也许不知道,高空抛物已是城市生活中的一大难以治理的安全隐患。一个小小的烟头、水果从高处扔下来,就可能引起严重火灾、人员伤亡、财物破坏,事发后…

在WebGL场景中进行棋盘操作的实验

这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子。在这一过程中要考虑不同棋子的移动力和影响范围不同&#x…

em算法python代码_EM算法的python实现的方法步骤

导读热词前言:前一篇文章大概说了EM算法的整个理解以及一些相关的公式神马的,那些数学公式啥的看完真的是忘完了,那就来用代码记忆记忆吧!接下来将会对python版本的EM算法进行一些分析。EM的python实现和解析引入问题(双硬币问题)…

第一阶段·Linux运维基础-第2章·Linux系统目录结构介绍

01 变量与PS1 02 添加用户 03 关闭SELinux 04 关闭iptables 05 显示中文乱码排查过程 06 总结 07 目录结构课程内容 08 Linux目录结构特点 09 Linux核心目录简介 10 Linux目录文件之配置文件 11 Linux核心目录文件之DNS及屌丝逃离洗浴中心之路 12 Linux核心目录文件…

使用junit-drools进行JBoss Drools单元测试

最近,我一直在大量使用JBoss Drools进行项目。 我不是Drools专家-我也不太相信这个框架,或者可能不是只相信该项目中的特定用例-我发现很难为基于Drools的业务规则编写简单,可维护的单元测试 。 这就是junit-drools诞生的方式-简单的帮助程序…

scrapy 采集网页出现丢失url的问题

url_list ["http://www.icoat.cc/news/list_18_3.html", "http://www.icoat.cc/news/list_18.html", "http://www.icoat.cc/news/list_18_2.html", ] for ls in url_list:   yield scrapy.Request(urlls, headersheader, callbackself.parseL…

java中重新加载指定文件_java-更改后重新加载属性文件

我将属性文件加载到一个类中,然后在整个应用程序中使用该类来获取它们.public class PropertiesUtil extends PropertyPlaceholderConfigurer {private static Map properties new HashMap();Overrideprotected void loadProperties(final Properties props) throws IOExcepti…

plsql 为空显示 0 的函数_不加班只加薪!从0到1教你制作出入库进销存表格

出入库表应用十分广泛,是每个公司都用到的表格,下面我们来看看怎么从一张空白表一步一步实现《出入库表》的制作,目的是做到只需要记录出库入库流水,自动对库存及累计出入库数量进行计算、实时统计。出入库表构成做一个出入库表&a…

eShopOnContainers学习系列(一):Swagger的使用

最近在看eShopOnContainer项目,抽取一下其中的基础知识点,做个记录,有兴趣的可以看下。 新建一个.net core API项目,添加Nuget包 Swashbuckle.AspNetCore.SwaggerGen、Swashbuckle.AspNetCore.SwaggerUI: 然后在启动文…

结合WebSocket编写WebGL综合场景示例

在WebGL场景中导入多个Babylon骨骼模型,在局域网用WebSocket实现多用户交互控制。 首先是场景截图: 上图在场景中导入一个Babylon骨骼模型,使用asdw、空格、鼠标控制加速度移动,在移动时播放骨骼动画。 上图在场景中加入更多的骨…

awk----基本用法

awk具体的请看这个 https://www.cnblogs.com/bwbfight/p/9402738.html awk 竟然自诩一种语言,ok.... 牛 既然这样就学习一下吧 awk -F‘[指定多个分隔符]’ 比如 awk -F[ :]表示指定:空格为分隔符 涉及多个重复分割符可以这样指定 awk -F[ :] 表示多个空…

java按条件查询结果为空_mybatis中查询结果为空时不同返回类型对应返回值问题...

今天在别人的代码基础上实现新需求,看到对于mybatis查询结果的判断不是很正确,如果查询结果为空就会异常,不知道大家有没有这样的疑惑:mybatis中resultType有多种返回类型,对于每种不同类型,查询结果为空时…

object picker 微信小程序_微信小程序 demo分享

选择器示例demo:1.普通选择器 2.多列选择器 3.时间选择器 4.日期选择器 5.省市区选择器wxml普通选择器:(普通数组)当前选择:{{array[index]}}普通选择器2:(普通json格式数组)当前选择:{{objectArray[objectIndex].name…

项目学生:分片集成测试数据

这是Project Student的一部分。 其他职位包括带有Jersey的 Web服务 客户端,带有Jersey的 Web服务服务器 , 业务层和带有Spring Data的持久性 。 到目前为止,所有集成测试都使用了内存嵌入式数据库,该数据库无法一次又一次地保留信…