使用AMQP Listener进行弹簧批量处理

时间:2014-10-11 08:10:12

标签: spring spring-batch spring-rabbit

我想将spring batch与RabbitMQ监听器一起使用

收到邮件后,将调用第一步并在每次邮件收件后重复处理

这是我的倾听者: 公共类MyMessageListener实现MessageListener {

@Override
public void onMessage(Message msg) {
    String messageBody= new String(msg.getBody());
    logger.info("Listener received message {}", messageBody);
    Gson gson = new Gson();


    //call spring batch step to Generate report
    //TODO


}

}

2 个答案:

答案 0 :(得分:0)

您可以使用Spring Batch IntegrationJobLaunchingGateway为每封邮件启动作业。

但是,如果您希望多封邮件构成“批量”,则应在RabbitTemplateItemReader内使用receive()要作为批处理处理的邮件(而不是听众)。

答案 1 :(得分:0)

我在监听器中调用该作业并且工作正常:

@Override 
void onMessage(Message msg) {

    JobLauncher jobLauncher = (JobLauncher) appContext.getBean("jobLauncher");
    Job job = (Job) appContext.getBean("rapportJob");

    try {
        JobParameters jobParameters = new JobParametersBuilder()
                                      .addLong("time",System.currentTimeMillis())
                                      .toJobParameters();
        JobExecution execution = jobLauncher.run(job, jobParameters);
        System.out.println("Exit Status : " + execution.getStatus());

    } catch (Exception e) {
        e.printStackTrace();
    }


}