亚马逊跨境电商_亚马逊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 {

        @Override
        public 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 {

        @Override
        public 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 {

        @Override
        public 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

亚马逊跨境电商

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值