Docker 安装 Consul
docker run -d --name=consul -p 8500:8500 consul agent -server -bootstrap -ui -client 0.0.0.0
运行后,http://127.0.0.1:8500访问 UI 界面

将服务注册到 Consul
package main
import (
"github.com/gin-gonic/gin"
"github.com/micro/go-plugins/registry/consul"
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/web"
"net/http"
)
func main() {
c := consul.NewRegistry(
registry.Addrs("127.0.0.1:8500"),
)
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "gin server...")
})
s := web.NewService(
web.Name("goodService"),
web.Registry(c),
web.Address(":8001"),
web.Metadata(map[string]string{"protocol": "http"}),
web.Handler(r),
)
s.Run()
}
运行后,在 Consul 的 UI 界面可以查看到刚注册的服务



再来实现服务发现
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"
"time"
)
func main() {
c := consul.NewRegistry(registry.Addrs("127.0.0.1:8500"))
s, err := c.GetService("goodService")
if err != nil {
log.Fatal("server gain fail..")
}
n := selector.Random(s)
sv, e := n()
if e != nil {
log.Fatal("selector fail..")
}
fmt.Println("Id:", sv.Id)
fmt.Println("Address:", sv.Address)
fmt.Println("Metadata:", sv.Metadata)
time.Sleep(time.Second * 1)
}
运行后输出
Id: 45ffe64f-952c-449f-88a6-c2db1dc2be66
Address: 192.168.88.109:8001
Metadata: map[protocol:http]