Mac上安裝etcd及快速搭建demo

一、Mac上安裝

1.1 安裝

Mac上安裝Etcd非常方便,推薦通過Homebrew來安裝

brew install etcd

1.2 啓動服務

etcd

成功啓動結果如下:
在這裏插入圖片描述

二、Java Demo搭建

package com.etcd.demo;


import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.Client;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.KeyValue;
import io.etcd.jetcd.kv.DeleteResponse;
import io.etcd.jetcd.kv.GetResponse;
import io.etcd.jetcd.kv.PutResponse;
import org.springframework.stereotype.Service;

import java.nio.charset.Charset;
import java.util.List;
import java.util.concurrent.CompletableFuture;

@Service
public class EtcdService {

    private static String localHost = "http://127.0.0.1:2379";
    private static String username = "root";
    private static String password = "12345";

    //etcl客戶端鏈接
    private static Client client = null;

    //鏈接初始化 單例模式
    private static synchronized Client getEtclClient() {
        if (null == client) {
            // create client
            client = Client.builder().endpoints(localHost).user(ByteSequence.from(username, Charset.defaultCharset())).password(ByteSequence.from("12345", Charset.defaultCharset())).build();
        }
        return client;
    }

    private static KV getKVClient() {
        return getEtclClient().getKVClient();
    }

    private static ByteSequence convert2ByteSequence(String obj) {
        return ByteSequence.from(obj.getBytes());
    }

    /**
     * 根據指定的配置名稱獲取對應的value
     *
     * @param key 配置項
     * @return
     * @throws Exception
     */
    public String get(String key) throws Exception {
        KV kvClient = getKVClient();
        // get the CompletableFuture
        CompletableFuture<GetResponse> getFuture = kvClient.get(convert2ByteSequence(key));
        // get the value from CompletableFuture
        GetResponse response = getFuture.get();
        List<KeyValue> kvs = response.getKvs();
        if (kvs.size() > 0) {
            String value = kvs.get(0).getValue().toString(Charset.defaultCharset());
            return value;
        } else {
            return null;
        }
    }

    /**
     * 新增或者修改指定的配置
     *
     * @param key
     * @param value
     * @return
     */
    public void put(String key, String value) throws Exception {
        KV kvClient = getKVClient();
        // put the key-value
        PutResponse response = kvClient.put(convert2ByteSequence(key), convert2ByteSequence(value)).get();
    }

    /**
     * 刪除指定的配置
     *
     * @param key
     * @return
     */
    public void delete(String key) {
        KV kvClient = getKVClient();
        // delete the key
        CompletableFuture<DeleteResponse> response = kvClient.delete(convert2ByteSequence(key));
    }
}

編寫test類

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class EtcdServiceTest  {

    private static final Logger logger = LoggerFactory.getLogger(EtcdServiceTest.class);

    @Autowired
    private EtcdService etcdService;

    @Test
    public void test_put() {
        String key1 = "k1";
        String val1 = "v1";
        try {
            etcdService.put(key1, val1);
            String s = etcdService.get(key1);
            logger.info("etcdService.get the key : {}, res : {} ", key1, s);
        } catch (Exception e) {
            logger.error("etcd put ex, key1:{} ", key1, e);
        }
    }
}

結果:

[INFO ] 2019-12-27 14:38:17.987 [main] EtcdServiceTest - etcdService.get the key : k1, res : v1 
發佈了136 篇原創文章 · 獲贊 19 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章