Go-Micro注册服务consul安装和使用
简介Go-Micro注册服务consul安装和使用
1、微服务主要是一个服务多台服务器进行支持,服务之间相互调用,但是我们调用微服务的时候,我们需要知道对应的服务的地址,那么这里就需要注册中心,将所有微服务的的地址都注册到注册中心,调用服务之前先去注册中心去获取对应服务的地址。
2、常用的注册中:consul、etcd、zookeeper等,这里我们先使用consul
3、consul的安装(本地测试推荐使用docker安装或者直接启用调试模式单机版本)
####单机版
consul agent -dev
####集群版
集群部署:
192.168.1.171
nohup ./consul agent -server -bind=192.168.1.171 -client=0.0.0.0 -bootstrap-expect=3 -data-dir=data -node=server-1 -ui &
192.168.1.177
nohup ./consul agent -server -bind=192.168.1.177 -client=0.0.0.0 -bootstrap-expect=3 -data-dir=data -node=server-2 -ui &
192.168.1.178
nohup ./consul agent -server -bind=192.168.1.178 -client=0.0.0.0 -bootstrap-expect=3 -data-dir=data -node=server-3 -ui &
在另外两台上执行后面命令加入到集群: ./consul join 192.168.1.171
添加服务【PUT】:
{
"id": "test04",
"name": "test04",
"tags": [
""
],
"address": "127.0.0.1",
"port": 3010,
"check": {
"deregisterCriticalServiceAfter": "90m",
"http": "http://192.168.1.171:8889/",
"interval": "10s"
}
}
删除无效的注册【PUT】:http://192.168.1.178:8500/v1/agent/service/deregister/服务名称
4、安装go-micro插件
go get -u github.com/micro/go-plugins
5、注册到consul
package main
import (
"github.com/gin-gonic/gin"
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/web"
"github.com/micro/go-plugins/registry/consul"
)
func main() {
//注册
registry := consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
"192.168.1.171:8500",
"192.168.1.177:8500",
"192.168.1.178:8500",
}
})
routers := gin.Default()
routers.GET("/", func(context *gin.Context) {
context.JSON(200, map[string]interface{}{
"name": 1,
})
})
routers.GET("/version", func(context *gin.Context) {
context.JSON(200, map[string]interface{}{
"version": "1.0.0",
})
})
server := web.NewService(
web.Name("gin-web"), //服务名称
web.Registry(registry), //注册到服务
//web.Address(":8080"),//这个可以不写,最好使用配置文件进行配置
web.Handler(routers),
)
server.Init() //加了这句就可以使用命令行的形式去设置我们一些启动的配置
server.Run()
}
运行成功后
6、查看命令行帮助
go run xxx.go --help
命令行文件在:
gomod目录\pkg\mod\github.com\micro\go-micro@v1.18.0\config\cmd\cmd.go
指定端口运行
go run xxx.go --server_address=:8080
7、Windows批处理命令运行多个服务
@echo off
start cmd /k "cd/d E:\go\micro-product &&go run reg-consul.go --server_address=:50001"
start cmd /k "cd/d E:\go\micro-product &&go run reg-consul.go --server_address=:50002"
start cmd /k "cd/d E:\go\micro-product &&go run reg-consul.go --server_address=:50003"
结束的时候一定要使用ctrl+c,否则会出现注册的服务删不掉
8、获取注册的服务信息(随机获取)
package main
import (
"fmt"
"github.com/micro/go-micro/client/selector"
"github.com/micro/go-micro/registry"
"github.com/micro/go-plugins/registry/consul"
"log"
)
func main() {
registry := consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
"192.168.1.171:8500",
"192.168.1.177:8500",
"192.168.1.178:8500",
}
})
//获取服务
services, err := registry.GetService("gin-web")
if err != nil {
log.Fatal(err)
}
next := selector.Random(services) //随机从服务中获取
//next := selector.RoundRobin(services) //轮询算法
node, err := next() //返回是一个函数
if err != nil {
log.Fatal(err)
}
fmt.Println("NODE ID:", node.Id)
fmt.Println("ADDRESS:", node.Address)
fmt.Println("METADATA:", node.Metadata)
}
常见的负载均衡算法包含:
1、轮询法(Round Robin)
2、加权轮询法(Weight Round Robin)
3、随机法(Random)
4、加权随机法(Weight Random)
5、平滑加权轮询法(Smooth Weight Round Robin)
6、源地址哈希法(Hash)
7、最小连接数法(Least Connections)