2.6
使用的什么数据库?MySQL 8.x
使用的哪种方式部署?Docker
发生了什么?问题描述:开发了一个新插件,插件代码如下图,遇到的问题是在本地测试能够正常跑通,发布到线上后,出现如下报错信息,我怀疑是线上的文章数量太多,查询的时候被阻塞了,不知道是不是,希望作者指点一下。
针对于新需求,根据子分类名称找到父类到子类路径上所有节点,新增的函数
主程序报错信息
2.6
使用的什么数据库?MySQL 8.x
使用的哪种方式部署?Docker
发生了什么?问题描述:开发了一个新插件,插件代码如下图,遇到的问题是在本地测试能够正常跑通,发布到线上后,出现如下报错信息,我怀疑是线上的文章数量太多,查询的时候被阻塞了,不知道是不是,希望作者指点一下。
针对于新需求,根据子分类名称找到父类到子类路径上所有节点,新增的函数
主程序报错信息
Hi @pandatools , thanks for reaching out here!
方便讲插件提交到仓库后分享出来我们复现一下么?
你可以先参考下面的实现方式来修改代码:
CategoryTreeVo createVirtualRoot(List<CategoryTreeVo> categoryTrees) {
return CategoryTreeVo.builder()
.spec(new Category.CategorySpec())
.status(new Category.CategoryStatus())
.metadata(new Metadata())
.children(categoryTrees)
.build();
}
public boolean findNodePath(CategoryTreeVo root, String nodeToFind, List<String> result) {
if (root == null) {
return false;
}
if (StringUtils.equals(root.getMetadata().getName(), nodeToFind)) {
result.add(root.getMetadata().getName());
return true;
}
for (CategoryTreeVo child : root.getChildren()) {
if (findNodePath(child, nodeToFind, result)) {
result.add(root.getMetadata().getName());
return true;
}
}
return false;
}
使用示例
// 将 listToTree 的返回结果作为参数传入
CategoryTreeVo virtualRoot = createVirtualRoot(treeVos);
List<String> result = new ArrayList<>();
findNodePath(virtualRoot, "ed064d5e-2b6f-4123-8114-78d0c6f2c4e2", result);
在写的时候可能需要注意以下几点:
Hi @pandatools ,我发现在源码中有些地方可能误使用了 Reactor,比如直接调用 block() ,递归调用不确定会不会出问题.
推荐先阅读一下 Reactor 的文档:https://projectreactor.io/docs/core/release/reference/。
我刚才发现,不只是我写的这个接口有问题,项目原生的接口也存在相同的问题,比如postFinder.listAll(),这个是查询所有文章的,我系统里有30多个文章,然后我按每两到三秒一次的频率触发这个方法,一样能造成这个报错,请问这个有啥解决方案吗,是不是频繁的查询会造成系统的堵塞
不是没有这个可能。目前我们使用的 R2DBC MySQL 驱动 https://github.com/asyncer-io/r2dbc-mysql 可能不是很稳定,不排除这种可能。如果能够提供一个稳定的复现步骤就更好了,这样方便我向上游提交 Issue 来修复这个问题。