【弄nèng - Zookeeper】Zookeeper入门教程(八)—— 分布式计数器DistributedAtomicInteger

本文介绍zk客户端curator的使用,本文主要介绍Curator recipes的使用
官方文档传送门
官方文档Curator recipes
参考:http://www.throwable.club/2018/12/16/zookeeper-curator-usage/
https://blog.csdn.net/hosaos/article/details/88233109
参考书籍:《从Paxos到ZooKeeper 分布式一致性原理与实践》

1. 分布式计数器DistributedAtomicInteger

JDK有AtomicInteger来实现原子自增。对于分布式系统,ZK提供的DistributedAtomicInteger。

pom

		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-recipes</artifactId>
			<version>2.13.0</version>
		</dependency>

关键方法

 	/**
     * 自增
     */
    @Override
    public AtomicValue<Integer>    increment() throws Exception
    {
        return worker(1);
    }

    /**
     * 自减
     */
    @Override
    public AtomicValue<Integer>    decrement() throws Exception
    {
        return worker(-1);
    }

    /**
     * 加
     */
    @Override
    public AtomicValue<Integer>    add(Integer delta) throws Exception
    {
        return worker(delta);
    }

    /**
     * 减
     */
    @Override
    public AtomicValue<Integer> subtract(Integer delta) throws Exception
    {
        return worker(-1 * delta);
    }

2. 事例

事例

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.atomic.AtomicValue;
import org.apache.curator.framework.recipes.atomic.DistributedAtomicInteger;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.retry.RetryNTimes;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * 分布式计数器 DistributedAtomicInteger
 */

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DistributedAtomicIntegerTests {

    private CuratorFramework client;

    /**
     * 使用Fluent风格API创建
     */
    @Before
    public void client() {
        // 重试策略
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        client = CuratorFrameworkFactory.builder()
                .connectString("localhost:2181")
                .sessionTimeoutMs(5000)  // 会话超时时间,默认60000ms
                .connectionTimeoutMs(10000) // 连接超时时间,默认15000ms
                .retryPolicy(retryPolicy) // 重试策略
                .namespace("base") // 名称空间,如果这里设置了名称空间,那么所有路径都将预先指定名称空间
                .build();
        client.start();
    }

    @Test
    public void test() throws Exception {
        String path = "/atomic_path1";
        // 参数3: 更新重试策略
        DistributedAtomicInteger atomicInteger =
                new DistributedAtomicInteger(client, path, new RetryNTimes(3, 1000));
        // 加8
        AtomicValue<Integer> atomicValue = atomicInteger.add(8);
        System.out.println("结果: " + atomicValue.succeeded() + ",值:" + atomicValue.postValue());
        System.out.println(atomicValue.preValue());
    }

}

控制台
在这里插入图片描述

源码地址

IT-CLOUD-ZOOKEEPER :zookeeper客户端Curator事例


项目推荐

IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
IT-CLOUD-ACTIVITI6 :Activiti教程源码。博文在本CSDN Activiti系列中。
IT-CLOUD-ELASTICSEARCH :elasticsearch教程源码。博文在本CSDN elasticsearch系列中。
IT-CLOUD-KAFKA :spring整合kafka教程源码。博文在本CSDN kafka系列中。
IT-CLOUD-KAFKA-CLIENT :kafka client教程源码。博文在本CSDN kafka系列中。
IT-CLOUD-ZOOKEEPER :zookeeper客户端Curator事例。博文在本CSDN zookeeper系列中。

开源项目,持续更新中,喜欢请 Star~

扫描二维码关注公众号,回复: 10667611 查看本文章
发布了178 篇原创文章 · 获赞 48 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/yy756127197/article/details/105371497
今日推荐