go-micro 学习
服务发现-微服务开发中的核心
有服务发现后,client、server工作流程
- 每个server启动时,都将自己的ip、port和服务名注册给“服务发现”
- 当client向服务发现发起服务请求时,“服务发现”会自动找一个可以用的服务。将其IP/port服务名返回给client。
- client再借助服务发现,访问server。
服务发现的种类:
consul:常用语go-micro中。
mdns:go-mirco中默认自带的服务发现。
etcd:k8s内嵌的服务发现。
consul关键特性
1、服务发现:consul提供服务,服务端主动向consul发起注册。
2、健康检查:定时发送消息,类似于“心跳包”。
安装consul
下载链接
安装分三步,下载,解压,解压文件放到/usr/loacl/bin/目录下,安装完成。
使用 consul -h验证安装
consul angent
-bind=0.0.0.0 指定consul 所在机器的IP地址默认的就是0.0.0.0
-http-port=8500 consul 自带的一个web访问的默认端口
-client=127.0.0.1 表明哪些机器可以访问consul 0.0.0.0 所有机器都可以访问
-config-dir=foo 所有主动注册服务的描述信息
-data-dir=path 储存所有注册过来的srv机器他的详细信息
-dev 开发者模式,直接以默认模式启动
-node=hostname 服务发现的名字。
-rejoin consul启动的时候,加入到consul集群。
-server 以服务方式开启consul,允许其他的consul连接到开启的consul上(形成集群)。如果不加- server,表示以“客户端的方式开启。不能被连接。
-ui web页面访问操作
命令demo
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=n1 -bind=192.168.10.106 -ui -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0
问题在于 我的环境没有/etc/consul.d/我只能自己创建一个,还不知道有啥问题。主要是我的机器的权限,很难搞……
consul agent -data-dir /tmp/consul -node=n2 -bind=192.168.10.106 -config-dir /etc/consul.d -rejoin -join 192.168.10.106
关闭consul
1、consul leave
修改配置文件
cd /etc/consul.d
vi web.json
写入–下边
{"service": {
"name": "MobenServer",
"tags": ["moben1","moben2"],
"port": 8800
}
}
保存退出
vi web.json 全面参数
{"service": {
"name": "MobenServer",
"tags": ["moben1", "moben2", "moben3", "moben4"],
"address": "192.168.10.106",
"port": 8800,
"check": {
"id": "api",
"name": "HTTP API on port 8800",
"http": "http://localhost:8800",
"interval": "10s",
"timeout": "1s"
}
}
}
执行命令
consul reload
或者关闭重启动
打开浏览器,键入192.168.10.106:8500查看 MobenServer的健康情况
除了上述情况检查一晚可以使用脚本或者tcp,ttl等方式检查。
安装 go-micro
#安装go-micro
go get -u -v github.com/micro/go-micro
#安装工具集
go get -u -v github.com/micro/micro
#安装protobuf插件
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u github.com/micro/protoc-gen-micro
mac 安装 go-micro 好多坑
GO111MODULE=on go get github.com/micro/micro/v2@latest
cd $GOPATH/src
git clone https://github.com/micro/micro.git
cd micro
go install
micro --version #可查看结果
开始创建服务
micro new --type "service" bj38 #版本补一下就命令不一样,所以多查查 mocro new --help
打开项目 从makefile找到命令
cd proto
protoc --micro_out=. --go_out=. bj38.proto
bug
`go build github.com/lucas-clemente/quic-go/internal/qtls: build constraints exclude all Go files in /Users/muyadong/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.23.0/internal/qtls`
解决方法:
参考
原因
目录中存在大量c文件,因为没有开启CGO机制,所以编译失败,导致出错。
解决方案
在保证本地有c编译器可用时,执行下面语句开启CGO机制。
go env -w CGO_ENABLED=1