设计模式:
生产者和消费者模型
逻辑设计:
1.生产者
定时任务从服务器A的文件夹上读取保存有前十分钟录音url的Execl文件;
将Execl中的录音url进行一定的判断,存放到一个map集合中;
在这里,服务器A中文件夹中存放的录音Execl是保存一定时间的,在这里,避免重复读取Execl文件,使用Redis,把读取过的Execl文件路径名保存到redis,设置一定生命周期
redisTemplate.opsForValue().set("nls:" + sourceProperties.getSourceName()[i] + ":" + urlStr, 1, 5, TimeUnit.DAYS);
将map集合中的录音url传递到接口中的方法中,进行url唯一性验证,将录音格式保存到数据库表B中;
调用阿里云的ASR服务,获取taskid,将taskid保存到数据库表B中;
这里使用RocketMq,把这个B对象给消费者来消费;
rocketMqHelper.asyncSend("NLS_VOICE_TOPIC", MessageBuilder.withPayload(nlsVoiceName).build());
基本上把这个对象作为参数了
2.消费者
@RocketMQMessageListener(consumerGroup = "${rocketmq.producer.groupName}", topic = "NLS_VOICE_TOPIC")
这里拿到B对象的所有数据,获取该录音对应的taskid,调用阿里ASR,根据taskid来异步获取该录音对于的转写文本;
抽取出转写文本中的核心文本,将文本保存到数据表表B中;
将对象B作为参数传递给质检算法的方法中,得到质检结果。