etcd 是一个类似于 zookeeper 的,服务发现工具。
参考简介:
etcd 性能对比:
在 linux 下面:安装最新的 3.1.1
- https: //github.com/coreos/etcd/releases/download/v3.1.1/etcd-v3.1.1-linux-amd64.tar.gz
解压缩。直接启动。
./etcd version
./etcd
我使用的是 virtualbox 安装的,因为是虚拟机。所以使用了 NAT 的网络。远程访问做了一个端口转发。
同时启动一个 etcd 需要绑定到 ip 10.0.2.15 , 默认启动之后是绑定到了 127.0.0.1 这个 ip。
- . / etcd--name test - etcd--advertise - client - urls http: //10.0.2.15:2379 --listen-client-urls http://10.0.2.15:2379
不知道为啥要使用两次命令,没有直接叫 addr 的参数。
etcd 目前默认使用 2379 端口提供 HTTP API 服务,2380 端口和 peer 通信。
下载 lib 库。依赖 google 的 grpc,protobuf。
maven 下载比较慢,可以使用 ali 的镜像。
java 代码:
- import com.coreos.jetcd.EtcdClient;
- import com.coreos.jetcd.EtcdClientBuilder;
- import com.coreos.jetcd.EtcdKV;
- import com.coreos.jetcd.api.KeyValue;
- import com.coreos.jetcd.api.RangeResponse;
- import com.coreos.jetcd.exception.AuthFailedException;
- import com.coreos.jetcd.exception.ConnectException;
- import com.google.common.util.concurrent.ListenableFuture;
- import com.google.protobuf.ByteString;
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- import java.util.concurrent.ExecutionException;
- /**
- */
- public class TestJetcd {
- public static void main(String[] args) throws ExecutionException,
- InterruptedException,
- UnsupportedEncodingException,
- AuthFailedException,
- ConnectException {
- EtcdClient client = EtcdClientBuilder.newBuilder().endpoints("http://localhost:2379").build();
- EtcdKV kvClient = client.getKVClient();
- System.out.println(kvClient);
- ByteString key = ByteString.copyFrom("test_key", "UTF-8");
- ByteString value = ByteString.copyFrom("test_value", "UTF-8");
- // System.out.println(kvClient.get(key).get());
- // put the key-value
- kvClient.put(key, value).get();
- //
- List list = kvClient.get(key).get().getKvsList();
- //循环显示所有数据。
- for (KeyValue keyValue: list) {
- //转换成utf-8 项目。
- String tmpKey = keyValue.getKey().toStringUtf8();
- System.out.println("key : " + tmpKey);
- String tmpVal = keyValue.getValue().toStringUtf8();
- System.out.println("value : " + tmpVal);
- System.out.println("version : " + keyValue.getVersion());
- }
- // delete the key
- //kvClient.delete(key).get();
- }
- }
- Exception in thread "main" java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: UNAVAILABLE
- at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:476)
- at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:455)
有的时候会这样报错。就得检查下 etcd 服务启动没有。
看看 virtualbox 的端口通不通。
或者直接用 http 访问就行。
就是一个 http 调用。
其他命令参考:
这个哥们写的挺全的。
etcd 的性能还是非常的强悍的。
java 的客户端使用的是 grpc 进行通信的。
来源: http://www.bubuko.com/infodetail-1953423.html