项目运行过程中发现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<AbbyyConversionEntity> abbyyQueue = new LinkedBlockingQueue<AbbyyConversionEntity>();
/**
* 队列添加数据
* @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为转换后文件路径";
}
}