微服务consul:文件注册服务与go服务注册服务

环境:Windows11  64位

go安装consul包: go get -u github.com/hashicorp/consul

1.下载安装consul

consul下载地址:https://www.consul.io/downloads.html

1)下载后,解压缩到目录中,例如:D:\GoCode\consul\consul.exe

2)开启cmd, cd D:\GoCode\consul进入目录(也可以设置环境变量 path,就无需进入consul目录下)

3)用开发者模式启动consul: consul agent -dev

4)网页输入:http://127.0.0.1:8500/回车,如下图,则consul启动成功

2.json脚本方式注册consul服务(了解即可)

1)在consul目录下,新建文件 myconsul.json,写入注册文本,如下例子

{
    "service": {
        "name": "Say",  //服务名
        "id": "ID1",   //ID随意
        "address": "127.0.0.1",   //服务地址
        "port": 8800,  //服务端口号
        "tags": ["primary"],  //服务别名
        "check":{  //健康检查
            "id":"api",
            "name":"SerSay check",
            "http":"http://localhost:8800",
            "interval": "10s",  //间隔10秒进行健康检查
            "timeout" : "1s"  //服务应答时间 1秒如果不应答  即为不健康
        }        
    }
}

2)在consul目录下,新建目录config

3)用以下命令,启动或重新启动consul服务,启动后,可见Say服务

consul agent -server -bootstrap-expect 1 -data-dir D:/GoCode/consul/config -node=n1 -bind=127.0.0.1 -ui -rejoin -config-dir=D:/GoCode/consul/ -client 0.0.0.0

命令说明:

-server 以服务方式开启server,允许其他的consul连接到开启的consul上,如无则以客户端方式开启

-bootstrap-expect 在一个集群中期望提供的server节点数目

-data-dir=path 指定服务数据文件存储位置

-node=hostname 服务发现的名字

-bind=0.0.0.0 指定consul所在机器的ip地址

-ui 可以谁用web页面来查看服务发现的详情

-rejoin consul启动的时候,加入到的consul集群

-config-dir 配置文件地址, 如果是文件夹会将所有文件合并

-client 指定哪些机器可以访问consul, 0.0.0.0表示所有机器

3.go注册consul服务,需加载包:"github.com/hashicorp/consul/api",源码如下

//定义类
type StuClass1 struct {
   __.UnimplementedSayServer
}
//绑定类方法
func (this *StuClass1) SayHello(ctx context.Context, in *__.HelloRequest) (*__.HelloReply, error) {
   return &__.HelloReply{Message: "你好!" + in.Name}, nil
}
//注册启动服务
func grpcServer() {
   //初始化consul配置
   consulConfig := api.DefaultConfig()

   //创建consul对象
   consulClient, err := api.NewClient(consulConfig)
   if err != nil {
      fmt.Println("api.NewClient err:", err)
      return
   }
   //注册服务 服务的常规配置 各参数含义,见2.中说明
   reg := api.AgentServiceRegistration{
      ID:      "ID1",
      Name:    "Say and Consul",
      Tags:    []string{"grpc", "consul"},
      Port:    1111,
      Address: "127.0.0.1",
      Check: &api.AgentServiceCheck{
         CheckID:  "api",
         TCP:      "127.0.0.1:1111",
         Timeout:  "1s",
         Interval: "5s",
      },
   }
   //注册服务到consul上
   consulClient.Agent().ServiceRegister(&reg)

   //启动服务
   g := grpc.NewServer()
   __.RegisterSayServer(g, &StuClass1{})

   listens, err := net.Listen("tcp", "127.0.0.1:1111")
   if err != nil {
      return
   }
   defer listens.Close()
   fmt.Println("服务启动...")
   g.Serve(listens)
}

4.开发者模式启动consul服务 consul agent -dev

运行go编写的Server源码,即可将服务Say and Consul注册到consul

打开localhost:8500可见如下图


 

 

5.编制go客户端访问 

func grpcClient() {
   //初始化consul配置
   consulConfig := api.DefaultConfig()
   //创建consul对象
   consulClient, err := api.NewClient(consulConfig)
   if err != nil {
      fmt.Println("api.NewClient err:", err)
      return
   }
   //服务发现 从consul上 获取健康服务
   services, _, err := consulClient.Health().Service("Say And Consul", "consul", true, nil)
   /*
      //参数
      service: 服务名  注册服务死 指定该string[api.agentserviceregistration.name]
      tag: 别名  如果有多个 任选一个
      passingonly:是否通过健康检查 true
      q:查询参数  通常传nil
      //返回值
      serviceentry: 存储服务的切片 当服务是一个集群时 可任选一个服务
      querymeta: 额外查询返回值 通常是nil
      error:错误信息
   */
   if err != nil {
      fmt.Println(err)
      return
   }
   ipaddr := services[0].Service.Address + ":" + strconv.Itoa(services[0].Service.Port)
  
   //连接服务
   //conn, err := grpc.Dial("127.0.0.1:1111", grpc.WithTransportCredentials(insecure.NewCredentials()))
   conn, err := grpc.Dial(ipaddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
   if err != nil {
      return
   }
   defer conn.Close()
   client := __.NewSayClient(conn)
   r, _ := client.SayHello(context.TODO(), &__.HelloRequest{Name: "consul"})
   fmt.Println(r.Message)
}

运行后,结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值