一、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