golang入门笔记——consul
github相关包:服务发现也是一个服务有服务发现后,client、server工作流程:1.每个server启动时,都将自己的IP、port和服务名 注册给“服务发现”2.当client向服务发现发起服务请求时,“服务发现”会自动找一个可用的服务,将其IP/port/服务名返回给client3.client借助服务发现发现服务,访问server服务发现的种类:consul:常应用于go-micr
什么是micro
github相关包:
服务发现
服务发现也是一个服务
有服务发现后,client、server工作流程:
1.每个server启动时,都将自己的IP、port和服务名 注册给“服务发现”
2.当client向服务发现发起服务请求时,“服务发现”会自动找一个可用的服务,将其IP/port/服务名返回给client
3.client借助服务发现发现服务,访问server
服务发现的种类:
consul:常应用于go-micro中
mdns:go-micro中默认自带的服务发现
etcd:k8s内嵌的服务发现
zookeeker:java中较常用
consul
consul的下载:链接
consul的启动:consul agent -dev
查看localhost:8500
consul常用命令
consul agent:
-bind=0.0.0.0 指定consul所在机器的IP地址。默认值:0.0.0.0
-http-port=8500 consul自带一个web访问的默认端口:8500
-client=127.0.0.1 表明哪些机器可以访问consul。默认本机。0.0.0.0所有机器都可访问
-config-dir=foo 所有主动注册服务的注册信息
-data-dir=path 储存所有注册过来的srv机器的详细信息
-dev 开发者模式,直接以默认配置启动consul
-node=hostname 服务发现的名字。
-rejoin consul启动的时候,加入到的consul集群
-server 以服务方式开启consul,允许其他的consul连接到开启的consul上(形成集群)。如果不加-server,表示以“客户端”的方式开启。不能被连接。
-ui 可以使用web页面来查看服务发现的详情
consul:
members:查看集群中有多少个成员
info:查看当前consul的IP信息
consul leave:优雅的关闭consul
注册服务到consul
步骤:1.进入配置文件cd /etc/consul.d/
2.创建json文件。sudo vim web.json
3.按json的语法,填写服务信息
4.重新启动consul
添加健康检查:
go语言使用consul
服务端:
package main
import (
"context"
"fmt"
"github.com/hashicorp/consul/api"
"google.golang.org/grpc"
"leetcode/pb"
"net"
)
type Children struct {
}
func (this *Children) SayHello(ctx context.Context, p *pb.Person) (*pb.Person, error) {
p.Name = "hello" + p.Name
return p, nil
}
func main() {
//1.初始化consul配置
consulConfig := api.DefaultConfig()
//2.创建consul对象
consulClient, err := api.NewClient(consulConfig)
if err != nil {
fmt.Println(err)
return
}
//3.在consul上注册服务的配置信息
registerService := api.AgentServiceRegistration{
ID: "test",
Tags: []string{"grpc", "consul"},
Name: "Grpc And Consul",
Port: 8800,
Address: "127.0.0.1",
Check: &api.AgentServiceCheck{
CheckID: "consul grpc test",
TCP: "127.0.0.1:8800",
Timeout: "5s",
Interval: "5s",
},
}
//4.注册grpc服务到consul上
consulClient.Agent().ServiceRegister(®isterService)
RPCserver := grpc.NewServer()
pb.RegisterHelloServer(RPCserver, new(Children))
listener, err := net.Listen("tcp", "127.0.0.1:8800")
if err != nil {
fmt.Println(err)
return
}
defer listener.Close()
RPCserver.Serve(listener)
}
客户端:
package main
import (
"context"
"fmt"
"github.com/hashicorp/consul/api"
"google.golang.org/grpc"
"leetcode/pb"
"strconv"
)
func main() {
//初始化consul配置
consulConfig := api.DefaultConfig()
consulClient, err := api.NewClient(consulConfig)
if err != nil {
fmt.Println(err)
return
}
//服务发现
service, _, err := consulClient.Health().Service("Grpc And Consul", "consul", true, nil)
//参数:服务名,别名,是否通过健康检查,查询参数
//返回值:存储服务的切片,额外查询返回的值,错误信息
if err != nil {
fmt.Println(err)
return
}
//获取服务的地址和端口号
target := service[0].Service.Address + ":" + strconv.Itoa(service[0].Service.Port)
grpcConn, _ := grpc.Dial(target, grpc.WithInsecure())
grpcClient := pb.NewHelloClient(grpcConn)
var child pb.Person
child.Name = "Yogen"
child.Age = 18
p, _ := grpcClient.SayHello(context.TODO(), &child)
fmt.Println(p)
}
服务的注销:
package main
import (
"fmt"
"github.com/hashicorp/consul/api"
)
func main() {
//初始化consul配置
consulConfig := api.DefaultConfig()
consulClient, err := api.NewClient(consulConfig)
if err != nil {
fmt.Println(err)
return
}
consulClient.Agent().ServiceDeregister("test")
}
更多推荐
所有评论(0)