|
|
@@ -12,7 +12,10 @@ import com.uas.search.schedule.TaskInformation;
|
|
|
import com.uas.search.schedule.TaskService;
|
|
|
import com.uas.search.service.IndexService;
|
|
|
import com.uas.search.util.CollectionUtils;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -161,14 +164,36 @@ public class JmsListener {
|
|
|
if (CollectionUtils.isEmpty(luceneMessages)) {
|
|
|
return "无消息";
|
|
|
}
|
|
|
- logger.info("获取luceneMessages" + luceneMessages.size() + "条,耗时:" + (System.currentTimeMillis() - startTime));
|
|
|
- for (LuceneMessage luceneMessage : luceneMessages){
|
|
|
- try {
|
|
|
- process(luceneMessage);
|
|
|
- } catch (Throwable e) {
|
|
|
- logger.error("", e);
|
|
|
- }
|
|
|
+ logger.info(title + "获取luceneMessages" + luceneMessages.size() + "条,耗时:" + (System.currentTimeMillis() - startTime));
|
|
|
+ // 按操作类型分组
|
|
|
+ long indexTime = System.currentTimeMillis();
|
|
|
+ Map<String, List<LuceneMessage>> luceneMessageMap = luceneMessages.stream().collect(Collectors.groupingBy(LuceneMessage :: getMethodType));
|
|
|
+ List<LuceneMessage> insertMessage = luceneMessageMap.get("insert");
|
|
|
+ List<LuceneMessage> updateMessage = luceneMessageMap.get("update");
|
|
|
+ List<LuceneMessage> deleteMessage = luceneMessageMap.get("delete");
|
|
|
+
|
|
|
+ List<Long> failedIds = new ArrayList<>();
|
|
|
+ if (!CollectionUtils.isEmpty(insertMessage)) {
|
|
|
+ failedIds = process(insertMessage);
|
|
|
+ logger.info("insert索引" + insertMessage.size() + "条,失败" + failedIds.size() + "耗时" + (System.currentTimeMillis() - indexTime));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(updateMessage)) {
|
|
|
+ failedIds = process(updateMessage);
|
|
|
+ logger.info("update索引" + updateMessage.size() + "条,失败" + failedIds.size() + "耗时" + (System.currentTimeMillis() - indexTime));
|
|
|
}
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(deleteMessage)) {
|
|
|
+ failedIds = process(deleteMessage);
|
|
|
+ logger.info("delete索引" + deleteMessage.size() + "条,失败" + failedIds.size() + "耗时" + (System.currentTimeMillis() - indexTime));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(failedIds)) {
|
|
|
+ long retryTime = System.currentTimeMillis();
|
|
|
+ luceneMessageDao.updateReTryCount(failedIds);
|
|
|
+ logger.info("处理失败:update retrycount" + failedIds.size() + "条,耗时" + (System.currentTimeMillis() - retryTime));
|
|
|
+ }
|
|
|
+
|
|
|
logger.info("处理luceneMessages" + luceneMessages.size() + "条,耗时:" + (System.currentTimeMillis() - startTime));
|
|
|
// 如果消息不止一页,立即消费下一页
|
|
|
if (sPage.getTotalPage() > 1){
|
|
|
@@ -218,19 +243,28 @@ public class JmsListener {
|
|
|
/**
|
|
|
* 对得到的队列消息进行解析,之后根据解析出来的对象,对lucene索引进行添加、更新或删除操作
|
|
|
*
|
|
|
- * @param luceneMessage 消息
|
|
|
+ * @param luceneMessages 消息
|
|
|
*/
|
|
|
- private void process(LuceneMessage luceneMessage) {
|
|
|
+ private List<Long> process(List<LuceneMessage> luceneMessages) {
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
- logger.info(luceneMessage.toString());
|
|
|
- Long id = luceneMessage.getId();
|
|
|
- luceneMessage.setRetryCount(luceneMessage.getRetryCount() + 1);
|
|
|
- luceneMessageDao.save(luceneMessage);
|
|
|
- ParsedQueueMessage parsedQueueMessage = queueMessageParser.parse(luceneMessage.getTableName(), luceneMessage.getDataId(), luceneMessage.getMethodType(), luceneMessage.getData());
|
|
|
- logger.info("获取源数据耗时:" + (System.currentTimeMillis() - startTime));
|
|
|
- List<Object> maintainedObjects = indexService.maintainIndexes(parsedQueueMessage);
|
|
|
- logger.info("Maintained... " + maintainedObjects);
|
|
|
- luceneMessageDao.dequeueLuceneMessage(id);
|
|
|
- logger.info("单条索引处理耗时:" + (System.currentTimeMillis() - startTime));
|
|
|
+ List<Long> successIds = new ArrayList<>();
|
|
|
+ List<Long> failedIds = new ArrayList<>();
|
|
|
+ for (LuceneMessage luceneMessage : luceneMessages) {
|
|
|
+ try {
|
|
|
+ ParsedQueueMessage parsedQueueMessage = queueMessageParser.parse(luceneMessage.getTableName(), luceneMessage.getDataId(), luceneMessage.getMethodType(), luceneMessage.getData());
|
|
|
+ List<Object> maintainedObjects = indexService.maintainIndexes(parsedQueueMessage);
|
|
|
+ logger.info("单条耗时" + (System.currentTimeMillis() - startTime) + ",Maintained... " + maintainedObjects);
|
|
|
+ successIds.add(luceneMessage.getId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ failedIds.add(luceneMessage.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(successIds)) {
|
|
|
+ long successTime = System.currentTimeMillis();
|
|
|
+ luceneMessageDao.dequeueLuceneMessages(successIds);
|
|
|
+ luceneMessageDao.deleteByIds(successIds);
|
|
|
+ logger.info("处理成功" + successIds.size() + "条,耗时" + (System.currentTimeMillis() - successTime));
|
|
|
+ }
|
|
|
+ return failedIds;
|
|
|
}
|
|
|
}
|