使用Spring而不使用xml的简单工作流程(SWF)工作流程

时间:2016-04-25 06:29:35

标签: java spring spring-mvc amazon-web-services amazon-swf

目前我正在为Activity Worker和Workflow worker注入基于spring注释的依赖注入。根据documentation。我在spring boot应用程序中定义了我的bean。每个工作程序都在单独的maven模块中定义。我面临的问题是,在运行我的ActivityWorker弹簧启动模块时,它保持活动状态并开始查找活动,但工作流程工作人员在启动模块后立即停止并显示消息'

  

在关机时取消注册暴露于JMX的bean

我的实施如下:

@Activities(version = "2.2")
@ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 100)

public interface TempActivities {
    public GreetWrapper getName();
    public void say(String what);
    /* public Integer doProcess();
    public int sum(Integer num);*/
}

public class TempActivitiesImpl implements TempActivities {
    GreetWrapper greetObj = new GreetWrapper();
    public TempActivitiesImpl() {
        // TODO Auto-generated constructor stub
    }
    @Override
    public GreetWrapper getName() {
        greetObj.setGreet("World");
        return greetObj;
    }

    @Override
    public void say(String what) {
        System.out.println(what);
    }
}
@Workflow(dataConverter = GreetWrapper.class)
@WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600)
public interface TempWorkflow {
    @Execute(name = "TempWorkflow", version = "2.2")
    public void greet();
}
public class TempWorkflowImpl implements TempWorkflow {

    private TempActivitiesClient activitiesClientImpl = new TempActivitiesClientImpl();
    private DecisionContextProvider contextProvider = new DecisionContextProviderImpl();

    private WorkflowClock clock
        = contextProvider.getDecisionContext().getWorkflowClock();
    @Override
    public void greet() {
        greet1(0);
    }

    public void greet1(int count,
        Promise < ? > ...waitFor) {
        if (count == 3) {
            return;
        }
        Promise < GreetWrapper > name = activitiesClientImpl.getName();
        Promise < String > greeting = getGreeting(name);
        activitiesClientImpl.say(greeting);
        Promise < Void > timer = clock.createTimer(30);
        greet1(count + 1, timer);
    }
    @Asynchronous
    public Promise < String > getGreeting(Promise < GreetWrapper > name) {
        String greeting = "Hello " + name.get().getGreet();
        System.out.println("Greeting: " + greeting);
        return Promise.asPromise(greeting);
    }
}

这是我的Activity Worker bean

@Configuration
public class AppConfig {
    public String getActivityTasklistName() {
        return "HelloWorldTaskList";
    }

    public String getDomainName() {
        return "helloWorldWalkthrough2";
    }

    public String getWorkflowTasklistName() {
        return "HelloWorldWorkflow";
    }
    public String getEndPoint() {
        String endPoint = "https://swf.us-east-1.amazonaws.com";
        return endPoint;
    }
    String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID");
    String swfSecretKey = System.getenv("AWS_SECRET_ACCESS_KEY");

    /*@Autowired
    TempActivities tempActivitiesImpl;
    @Autowired
    TempWorkflow tempWorkflowImpl; */
    @Bean
    public ClientConfiguration clientConfiguration() {
        ClientConfiguration config = new ClientConfiguration();
        config.withSocketTimeout(70 * 1000);
        return config;
    }
    @Bean
    public AWSCredentials basicAWSCredentials() {
        BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey);
        return basicAWSCredentials;
    }
    @Bean
    public AmazonSimpleWorkflow amazonSimpleWorkflowClient() {
        AmazonSimpleWorkflow amazonSimpleWorkflowClient = new AmazonSimpleWorkflowClient(basicAWSCredentials(), clientConfiguration());
        amazonSimpleWorkflowClient.setEndpoint(getEndPoint());
        return amazonSimpleWorkflowClient;
    }
    @Bean
    public TempActivitiesClient tempActivitiesClient() {
        TempActivitiesClient tempActivitiesClient = new TempActivitiesClientImpl();
        return tempActivitiesClient;
    }
    @Bean
    public SpringActivityWorker springActivityWorker() throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException {
        SpringActivityWorker activityWorker = new SpringActivityWorker(amazonSimpleWorkflowClient(), getDomainName(), getWorkflowTasklistName());

        activityWorker.addActivitiesImplementation(new TempActivitiesImpl());
        return activityWorker;
    }
}

这是我的工作流工作者bean

public class WorkFlowAppConfig {

    public String getActivityTasklistName() {
        return "HelloWorldTaskList";
    }

    public String getDomainName() {
        return "helloWorldWalkthrough2";
    }

    public String getWorkflowTasklistName() {
        return "HelloWorldWorkflow";
    }
    public String getEndPoint() {
        String endPoint = "https://swf.us-east-1.amazonaws.com";
        return endPoint;
    }
    String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID");
    String swfSecretKey = System.getenv("AWS_SECRET_ACCESS_KEY");

    /*@Autowired
    TempActivities tempActivitiesImpl;*/
    @Autowired
    TempWorkflow tempWorkflowImpl;
    @Bean
    @Scope("workflow")
    public ClientConfiguration clientConfiguration() {
        ClientConfiguration config = new ClientConfiguration();
        config.withSocketTimeout(70 * 1000);
        return config;
    }
    @Bean
    @Scope("workflow")
    public AWSCredentials basicAWSCredentials() {
        BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey);
        return basicAWSCredentials;
    }
    @Bean
    @Scope("workflow")
    public AmazonSimpleWorkflow amazonSimpleWorkflowClient() {
        AmazonSimpleWorkflow amazonSimpleWorkflowClient = new AmazonSimpleWorkflowClient(basicAWSCredentials(), clientConfiguration());
        amazonSimpleWorkflowClient.setEndpoint(getEndPoint());
        return amazonSimpleWorkflowClient;
    }
    @Bean
    @Scope("workflow")
    public TempActivitiesClient activitiesClientImpl() {
        return new TempActivitiesClientImpl();
    }
    @Bean
    @Scope("workflow")
    public SpringWorkflowWorker springWorkflowWorker() throws InstantiationException, IllegalAccessException {
        SpringWorkflowWorker workflowWorker = new SpringWorkflowWorker(amazonSimpleWorkflowClient(), getDomainName(), getWorkflowTasklistName());

        workflowWorker.addWorkflowImplementation(tempWorkflowImpl);
        workflowWorker.setRegisterDomain(true);
        // workflowWorker.setDomainRetentionPeriodInDays(1);
        return workflowWorker;
    }
    @Bean
    public CustomScopeConfigurer customScope() {
        CustomScopeConfigurer configurer = new CustomScopeConfigurer();
        Map < String, Object > workflowScope = new HashMap < String, Object > ();
        workflowScope.put("workflow", new WorkflowScope());
        configurer.setScopes(workflowScope);

        return configurer;
    }
}

0 个答案:

没有答案