ABBYY 填坑!!!多人员调用ABBYY转换任务时,就会出现程序报错

项目运行过程中发现ABBYY微服务经常莫名其妙死掉,后来和ABBYY技术人员沟通了解到

ABBYY转换引擎只有卸载掉,才可以进行下一次转换!!!!!!!!!!

项目运行过程中,多个人员调用ABBYY转换任务时,就会出现程序报错。。。。。。。

解决方案:添加消息队列

1、AbbyyConversionEntity   转换实体类

/**
 * @Auther: NPF
 * @Date: 2019/6/25 21:54
 *  Abbyy 转换实体类
 */
public class AbbyyConversionEntity {

    /**
     * 输入路径
     */
    private String input;

    /**
     * 输出路径
     */
    private String output;

    public AbbyyConversionEntity() {

    }

    public AbbyyConversionEntity(String input, String output) {
        this.input = input;
        this.output = output;
    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public String getOutput() {
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }
}

2、AbbyyConversionQueue   Abbyy 转换队列

**
 * @Auther: NPF
 * @Date: 2019/6/25 21:52
 *
 * Abbyy 转换队列
 */
@Component
public class AbbyyConversionQueue {

    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 转换队列
     */
    BlockingQueue abbyyQueue = new LinkedBlockingQueue();

    /**
     *  队列添加数据
     * @param abbyy
     * @throws InterruptedException
     */
    public void add(AbbyyConversionEntity abbyy) throws InterruptedException{
        logger.error("生产端*********添加数据*********"+ JSON.toJSONString(abbyy));
        abbyyQueue.put(abbyy);
    }

    /**
     * 取出消息队列的数据
     * @return
     * @throws InterruptedException
     */
    public AbbyyConversionEntity takeAbbyy() throws InterruptedException {
        return abbyyQueue.take();
    }

    /**
     * 通过构造函数启动消费者线程
     */
    public AbbyyConversionQueue() {
        // 启动消费者线程
        ConsumerThread consumer = new ConsumerThread();
        consumer.start();
        System.out.println("=======================Abbyy消费者线程=================启动成功");
    }

    /**
     * 定义消费端内部类
     */
    class ConsumerThread extends Thread{

        /**
         * 转换实体类
         */
        AbbyyConversionEntity abbyyBean;

        /**
         * 转换工具类
         */
        AbbyyHandling app;

        @Override
        public void run() {
            try {
                while (true) {
                    // 取数据
                    abbyyBean = takeAbbyy();
                    app = new AbbyyHandling();
                    try {
                        logger.error("消费端*********获取数据*********"+JSON.toJSONString(abbyyBean));
                        app.Conversion(abbyyBean.getInput(),abbyyBean.getOutput());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    // 转换完一个文件休眠5s
                    Thread.sleep(5*1000);
                }
            } catch (InterruptedException ex) {
            }
        }
    }

}

3、AbbyyController Abbyy转换控制类

/**
     * Abbyy转换消息队列
     */
    @Autowired
    private AbbyyConversionQueue abbyyConversionQueue;

    /**
     * 单个文件转换
     */
    @ApiOperation("单个文件转换")
    @SysLog("ABBYY转换文件")
    @GetMapping("/conversion")
    public String conversion(@RequestParam(value = "input")String input,@RequestParam(value = "output") String output){
        if(StringUtils.isNotBlank(input) && StringUtils.isNotBlank(output)){
            try {
                // 将任务添加到消息队列
                abbyyConversionQueue.add(new AbbyyConversionEntity(input,output));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "success";
        }else{
            return "error: 填写正确的转换文件路径,input为源文件路径,output为转换后文件路径";
        }
    }

 

你可能感兴趣的:(ABBYY)