12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package internal
- import (
- "os"
- "strings"
- "github.com/wuntsong-org/go-zero-plus/core/discov"
- "github.com/wuntsong-org/go-zero-plus/core/netx"
- )
- const (
- allEths = "0.0.0.0"
- envPodIp = "POD_IP"
- )
- // NewRpcPubServer returns a Server.
- func NewRpcPubServer(etcd discov.EtcdConf, listenOn string, middlewares ServerMiddlewaresConf,
- opts ...ServerOption) (Server, error) {
- registerEtcd := func() error {
- pubListenOn := figureOutListenOn(listenOn)
- var pubOpts []discov.PubOption
- if etcd.HasAccount() {
- pubOpts = append(pubOpts, discov.WithPubEtcdAccount(etcd.User, etcd.Pass))
- }
- if etcd.HasTLS() {
- pubOpts = append(pubOpts, discov.WithPubEtcdTLS(etcd.CertFile, etcd.CertKeyFile,
- etcd.CACertFile, etcd.InsecureSkipVerify))
- }
- if etcd.HasID() {
- pubOpts = append(pubOpts, discov.WithId(etcd.ID))
- }
- pubClient := discov.NewPublisher(etcd.Hosts, etcd.Key, pubListenOn, pubOpts...)
- return pubClient.KeepAlive()
- }
- server := keepAliveServer{
- registerEtcd: registerEtcd,
- Server: NewRpcServer(listenOn, middlewares, opts...),
- }
- return server, nil
- }
- type keepAliveServer struct {
- registerEtcd func() error
- Server
- }
- func (s keepAliveServer) Start(fn RegisterFn) error {
- if err := s.registerEtcd(); err != nil {
- return err
- }
- return s.Server.Start(fn)
- }
- func figureOutListenOn(listenOn string) string {
- fields := strings.Split(listenOn, ":")
- if len(fields) == 0 {
- return listenOn
- }
- host := fields[0]
- if len(host) > 0 && host != allEths {
- return listenOn
- }
- ip := os.Getenv(envPodIp)
- if len(ip) == 0 {
- ip = netx.InternalIp()
- }
- if len(ip) == 0 {
- return listenOn
- }
- return strings.Join(append([]string{ip}, fields[1:]...), ":")
- }
|