client.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package micro
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/container/gvar"
  5. "github.com/gogf/gf/v2/frame/g"
  6. consul "github.com/rpcxio/rpcx-consul/client"
  7. "github.com/smallnest/rpcx/client"
  8. "strings"
  9. )
  10. // InitMicroSrvClient 获取微服务客户端,arg为可选参数,若有必须是两个,分别是:reg string, serverAddr string
  11. func InitMicroSrvClient(ctx context.Context, serviceName, key string, args ...string) (c client.XClient) {
  12. reg, _ := g.Config().Get(ctx, "service_registry.registry")
  13. etcdAddr, _ := g.Config().Get(ctx, "service_registry.server-addr")
  14. if len(args) == 2 {
  15. reg = gvar.New(args[0])
  16. etcdAddr = gvar.New(args[1])
  17. }
  18. config, _ := g.Config().Get(ctx, key)
  19. arr := strings.Split(config.String(), ",")
  20. srvName := arr[0]
  21. if len(arr) == 2 { // 点对点 直连
  22. d, _ := client.NewPeer2PeerDiscovery("tcp@"+arr[1], "")
  23. c = client.NewXClient(serviceName, client.Failtry, client.RandomSelect, d, client.DefaultOption)
  24. return c
  25. } else {
  26. if reg.String() == "consul" { // 服务发现使用consul
  27. //d, _ := etcd_client.NewEtcdV3Discovery(srvName, serviceName, []string{etcdAddr}, nil)
  28. d, _ := consul.NewConsulDiscovery(srvName, serviceName, []string{etcdAddr.String()}, nil)
  29. //d, _ := client.NewConsulDiscovery(srvName, serviceName, []string{etcdAddr}, nil)
  30. c = client.NewXClient(serviceName, client.Failover, client.RoundRobin, d, client.DefaultOption)
  31. return c
  32. }
  33. }
  34. return nil
  35. }