从 Spring 批处理器调用 Async REST api

我写了一个处理列表列表的 spring 批处理作业。


Reader 返回列表列表。Processor 处理每个 ListItem 并返回处理过的 List。Writer 从 List of List 向 DB 和 sftp 写入内容。


我有一个用例,我从 Spring 批处理器调用 Async REST api。在 ListenableFuture 响应中,我实现了 LitenableFutureCallback 来处理成功和失败,它按预期工作,但在异步调用返回某些内容之前,ItemProcessor 不会等待来自异步 api 的回调并将对象(列表)返回给编写器。


我不确定如何实现和处理来自 ItemProcessor 的异步调用。


我确实读过 AsyncItemProcessor 和 AsyncItemWriter,但我不确定在这种情况下是否应该使用它。


我还想过在 AsyncRestTemplate 的 ListenableFuture 响应上调用 get(),但根据文档,它会阻塞当前线程,直到它收到响应。


我正在寻求有关如何实现这一点的帮助。下面的代码片段:


处理器:


public class MailDocumentProcessor implements ItemProcessor<List<MailingDocsEntity>, List<MailingDocsEntity>> {


... Initialization code


@Override

public List<MailingDocsEntity> process(List<MailingDocsEntity> documentsList) throws Exception {

    logger.info("Entering MailingDocsEntity processor");



    List<MailingDocsEntity> synchronizedList = Collections.synchronizedList(documentsList);



    for (MailingDocsEntity mailingDocsEntity : synchronizedList) {

        System.out.println("Reading Mailing id: " + mailingDocsEntity.getMailingId());


       ..code to get the file


         //If the file is not a pdf convert it

         String fileExtension = readFromSpResponse.getFileExtension();

         String fileName = readFromSpResponse.getFileName();

         byte[] fileBytes = readFromSpResponse.getByteArray();


         try {


             //Do checks to make sure PDF file is being sent

             if (!"pdf".equalsIgnoreCase(fileExtension)) {

                 //Only doc, docx and xlsx conversions are supported


                     ...Building REquest object

                     //make async call to pdf conversion service

            pdfService.convertDocxToPdf(request, mailingDocsEntity);


                 } else {

                     logger.error("The file cannot be converted to a pdf.\n"

                        );


                 }

             }



         } 

我原来的批处理作业是同步的,我正在转换为异步以加快处理速度。我确实尝试寻找类似的问题,但找不到足够的信息。任何指示或帮助都非常感谢。



狐的传说
浏览 166回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java