我正在使用Rabbit-messaging Queue和Spring批处理结合使用。生产者服务将消息发布到队列中。在这里,我的代码是使用者,我正在使用Spring Batch对其进行读取,处理和写入。在这里,当消息被推送到队列时,我必须触发作业(意味着没有控制器端点)。为此,我使用 @RabbitListener(“ queue_Name),它将在发布新消息时也进行监听,并且也接收消息。下面是代码。
@EnableRabbit
public class Eventscheduler {
@Autowired
Job csvJob;
@Autowired
private JobLauncher jobLauncher;
//@Scheduled(cron="0 */5 * ? * *")
@RabbitListener(queues ="BulkSolve_GeneralrequestQueue")
public void trigger(){
Reader.batchstatus=false;
Map<String,JobParameter> maps= new HashMap<String,JobParameter>();
maps.put("time", new JobParameter(System.currentTimeMillis()));
JobParameters jobParameters = new JobParameters(maps);
JobExecution execution=null;
try {
//JobLauncher jobLauncher = new JobLauncher();
execution=jobLauncher.run(csvJob, jobParameters);
} catch (JobExecutionAlreadyRunningException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JobRestartException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JobInstanceAlreadyCompleteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JobParametersInvalidException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("JOB Executed:" + execution.getStatus());
}
}
这是我的问题在这里,我已经在阅读已发布的消息,然后如何将消息pojo传递给ItemReader?在触发job.SO之前,我的ItemReader将读取该消息。谁能帮助我指导如何实现这一目标?
谢谢
答案 0 :(得分:0)
从RabbitListener
注释的Javadoc中,您的注释方法可以将消息作为参数。例如:
@RabbitListener(queues ="BulkSolve_GeneralrequestQueue")
public void trigger(Message message){
// use message as needed
}
然后您可以访问收到的消息并将其用作作业的输入。