Go语言——docker-compose部署etcd以及go使用其服务注册
一、docker-compsoe.yml文件如下
version: "3.5"services:etcd:hostname: etcdimage: bitnami/etcd:latestdeploy:replicas: 1restart_policy:condition: on-failureprivileged: truevolumes:# 持久化 etcd 数据到宿主机- "/app/apisix/etcd/data:/bitnami/etcd/data"environment:# 客户端广播地址- "ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379"# 客户端监听地址- "ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379"# 节点间通信地址- "ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380"- "ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380"# 设置初始集群信息- "ETCD_INITIAL_CLUSTER=node1=http://0.0.0.0:2380"- "ETCD_NAME=node1"- "ETCD_DATA_DIR=/opt/bitnami/etcd/data"# 👇 开启权限认证(必须配置密码)- "ETCD_AUTH_ENABLED=true"- "ETCD_ROOT_PASSWORD=123456"ports:- "2379:2379" # 客户端通信端口- "2380:2380" # 节点间通信端口networks:- etcdnetnetworks:etcdnet:name: etcdnet
安装完成之后,进入容器中,使用如下命令,测试连接
etcdctl --user root:123456 endpoint health
二、go项目中安装依赖
go get go.etcd.io/etcd/client/v3
go get github.com/go-kratos/kratos/contrib/registry/etcd/v2
三、main.go中注册服务
func newApp(logger log.Logger, gs *grpc.Server, hs *http.Server) *kratos.App {client, err := clientv3.New(clientv3.Config{Endpoints: []string{"127.0.0.1:2379"},})reg := etcd.New(client)if err != nil {panic(err)}return kratos.New(kratos.ID(id),kratos.Name(Name),kratos.Version(Version),kratos.Metadata(map[string]string{}),kratos.Logger(logger),kratos.Server(gs,hs,),kratos.Registrar(reg),)
}
四、启动项目,成功之后,进入容器查看
etcdctl --user root:123456 endpoint health
## print: 127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.728868ms