Go-Micro注册服务consul安装和使用

xiaohai 2021-05-09 22:25:40 2639人围观 标签: Go 
简介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)