在分布式系统结构中,使用ZOOKEEPER里的CuratorFramework控制全局锁,有一个隐藏的问题,生成的全局锁路径释放后,存留了很多空的NODE节点,这些节点数据量很大的时候,会占用很大的磁盘空间,这个可能是ZK版本的一个bug,要是使用完全局锁之后自动帮我们清除掉,就不会有这类问题,针对bug,需要定时清掉空的节点。代码如下,以供记录一下。
1、测试类,测试定时任务手工执行接口,执行成功后,查看一下节点是否真实删除
package xxxxxxxxxxxxxxxxx
import xxxxxxxxxxxx
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.atomic.DistributedAtomicLong;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
@RestController
@Slf4j
@Api(value="test", description="测试")
public class TestController {
private final CuratorFramework curator;
private final LockNodeCleanService lockNodeCleanService;
public TestController(CuratorFramework curator,LockNodeCleanService lockNodeCleanService) {
this.curator = curator;
this.lockNodeCleanService =lockNodeCleanService;
}
@GetMapping("/internal/zookeeper/list