consul_register.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package consul
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/hashicorp/consul/api"
  6. )
  7. type ConsulService struct {
  8. IP string
  9. Port int
  10. Tag []string
  11. Name string
  12. }
  13. func RegitserService(ca string, cs *ConsulService) {
  14. //register consul
  15. consulConfig := api.DefaultConfig()
  16. consulConfig.Address = ca
  17. client, err := api.NewClient(consulConfig)
  18. if err != nil {
  19. fmt.Printf("NewClient error\n%v", err)
  20. return
  21. }
  22. agent := client.Agent()
  23. interval := time.Duration(10) * time.Second
  24. deregister := time.Duration(1) * time.Minute
  25. reg := &api.AgentServiceRegistration{
  26. ID: fmt.Sprintf("%v-%v-%v", cs.Name, cs.IP, cs.Port), // 服务节点的名称
  27. Name: cs.Name, // 服务名称
  28. Tags: cs.Tag, // tag,可以为空
  29. Port: cs.Port, // 服务端口
  30. Address: cs.IP, // 服务 IP
  31. Check: &api.AgentServiceCheck{ // 健康检查
  32. Interval: interval.String(), // 健康检查间隔
  33. GRPC: fmt.Sprintf("%v:%v/%v", cs.IP, cs.Port, cs.Name), // grpc 支持,执行健康检查的地址,service 会传到 Health.Check 函数中
  34. DeregisterCriticalServiceAfter: deregister.String(), // 注销时间,相当于过期时间
  35. },
  36. }
  37. fmt.Printf("registing to %v\n", ca)
  38. if err := agent.ServiceRegister(reg); err != nil {
  39. fmt.Printf("Service Register error\n%v", err)
  40. return
  41. }
  42. }