This commit is contained in:
withchao 2025-02-07 17:18:21 +08:00
parent 31a912c013
commit 9bc6a651cf
3 changed files with 68 additions and 58 deletions

View File

@ -29,14 +29,12 @@ import (
conf "github.com/openimsdk/open-im-server/v3/pkg/common/config" conf "github.com/openimsdk/open-im-server/v3/pkg/common/config"
kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discovery" kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discovery"
disetcd "github.com/openimsdk/open-im-server/v3/pkg/common/discovery/etcd" disetcd "github.com/openimsdk/open-im-server/v3/pkg/common/discovery/etcd"
"github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics"
"github.com/openimsdk/tools/discovery/etcd" "github.com/openimsdk/tools/discovery/etcd"
"github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/errs"
"github.com/openimsdk/tools/log" "github.com/openimsdk/tools/log"
"github.com/openimsdk/tools/mw" "github.com/openimsdk/tools/mw"
"github.com/openimsdk/tools/system/program" "github.com/openimsdk/tools/system/program"
"github.com/openimsdk/tools/utils/datautil" "github.com/openimsdk/tools/utils/datautil"
"github.com/openimsdk/tools/utils/jsonutil"
"github.com/openimsdk/tools/utils/network" "github.com/openimsdk/tools/utils/network"
"github.com/openimsdk/tools/utils/runtimeenv" "github.com/openimsdk/tools/utils/runtimeenv"
"google.golang.org/grpc" "google.golang.org/grpc"
@ -69,66 +67,67 @@ func Start(ctx context.Context, index int, config *Config) error {
prometheusPort int prometheusPort int
) )
registerIP, err := network.GetRpcRegisterIP("") //registerIP, err := network.GetRpcRegisterIP("")
if err != nil { //if err != nil {
return err // return err
} //}
//
getAutoPort := func() (net.Listener, int, error) { // todo
registerAddr := net.JoinHostPort(registerIP, "0") //getAutoPort := func() (net.Listener, int, error) {
listener, err := net.Listen("tcp", registerAddr) // registerAddr := net.JoinHostPort(registerIP, "0")
if err != nil { // listener, err := net.Listen("tcp", registerAddr)
return nil, 0, errs.WrapMsg(err, "listen err", "registerAddr", registerAddr) // if err != nil {
} // return nil, 0, errs.WrapMsg(err, "listen err", "registerAddr", registerAddr)
_, portStr, _ := net.SplitHostPort(listener.Addr().String()) // }
port, _ := strconv.Atoi(portStr) // _, portStr, _ := net.SplitHostPort(listener.Addr().String())
return listener, port, nil // port, _ := strconv.Atoi(portStr)
} // return listener, port, nil
//}
if config.API.Prometheus.AutoSetPorts && config.Discovery.Enable != conf.ETCD { //
return errs.New("only etcd support autoSetPorts", "RegisterName", "api").Wrap() //if config.API.Prometheus.AutoSetPorts && config.Discovery.Enable != conf.ETCD {
} // return errs.New("only etcd support autoSetPorts", "RegisterName", "api").Wrap()
//}
router, err := newGinRouter(ctx, client, config) router, err := newGinRouter(ctx, client, config)
if err != nil { if err != nil {
return err return err
} }
if config.API.Prometheus.Enable { //if config.API.Prometheus.Enable {
var ( // var (
listener net.Listener // listener net.Listener
) // )
//
if config.API.Prometheus.AutoSetPorts { // if config.API.Prometheus.AutoSetPorts {
listener, prometheusPort, err = getAutoPort() // listener, prometheusPort, err = getAutoPort()
if err != nil { // if err != nil {
return err // return err
} // }
//
etcdClient := client.(*etcd.SvcDiscoveryRegistryImpl).GetClient() // etcdClient := client.(*etcd.SvcDiscoveryRegistryImpl).GetClient()
//
_, err = etcdClient.Put(ctx, prommetrics.BuildDiscoveryKey(prommetrics.APIKeyName), jsonutil.StructToJsonString(prommetrics.BuildDefaultTarget(registerIP, prometheusPort))) // _, err = etcdClient.Put(ctx, prommetrics.BuildDiscoveryKey(prommetrics.APIKeyName), jsonutil.StructToJsonString(prommetrics.BuildDefaultTarget(registerIP, prometheusPort)))
if err != nil { // if err != nil {
return errs.WrapMsg(err, "etcd put err") // return errs.WrapMsg(err, "etcd put err")
} // }
} else { // } else {
prometheusPort, err = datautil.GetElemByIndex(config.API.Prometheus.Ports, index) // prometheusPort, err = datautil.GetElemByIndex(config.API.Prometheus.Ports, index)
if err != nil { // if err != nil {
return err // return err
} // }
listener, err = net.Listen("tcp", fmt.Sprintf(":%d", prometheusPort)) // listener, err = net.Listen("tcp", fmt.Sprintf(":%d", prometheusPort))
if err != nil { // if err != nil {
return errs.WrapMsg(err, "listen err", "addr", fmt.Sprintf(":%d", prometheusPort)) // return errs.WrapMsg(err, "listen err", "addr", fmt.Sprintf(":%d", prometheusPort))
} // }
} // }
//
go func() { // go func() {
if err := prommetrics.ApiInit(listener); err != nil && !errors.Is(err, http.ErrServerClosed) { // if err := prommetrics.ApiInit(listener); err != nil && !errors.Is(err, http.ErrServerClosed) {
netErr = errs.WrapMsg(err, fmt.Sprintf("api prometheus start err: %d", prometheusPort)) // netErr = errs.WrapMsg(err, fmt.Sprintf("api prometheus start err: %d", prometheusPort))
netDone <- struct{}{} // netDone <- struct{}{}
} // }
}() // }()
//
} //}
address := net.JoinHostPort(network.GetListenIP(config.API.Api.ListenIP), strconv.Itoa(apiPort)) address := net.JoinHostPort(network.GetListenIP(config.API.Api.ListenIP), strconv.Itoa(apiPort))
server := http.Server{Addr: address, Handler: router} server := http.Server{Addr: address, Handler: router}

View File

@ -47,6 +47,8 @@ func NewOnlinePusher(disCov discovery.Conn, config *Config) OnlinePusher {
switch config.Discovery.Enable { switch config.Discovery.Enable {
case conf.ETCD: case conf.ETCD:
return NewDefaultAllNode(disCov, config) return NewDefaultAllNode(disCov, config)
case conf.Standalone:
return nil
default: default:
log.ZWarn(context.Background(), "NewOnlinePusher is error", errs.Wrap(errors.New("unsupported discovery type")), "type", config.Discovery.Enable) log.ZWarn(context.Background(), "NewOnlinePusher is error", errs.Wrap(errors.New("unsupported discovery type")), "type", config.Discovery.Enable)
return nil return nil

View File

@ -127,7 +127,6 @@ func Start[T any](ctx context.Context, discovery *conf.Discovery, prometheusConf
} }
etcdClient := client.(*etcd.SvcDiscoveryRegistryImpl).GetClient() etcdClient := client.(*etcd.SvcDiscoveryRegistryImpl).GetClient()
_, err = etcdClient.Put(ctx, prommetrics.BuildDiscoveryKey(rpcRegisterName), jsonutil.StructToJsonString(prommetrics.BuildDefaultTarget(registerIP, prometheusPort))) _, err = etcdClient.Put(ctx, prommetrics.BuildDiscoveryKey(rpcRegisterName), jsonutil.StructToJsonString(prommetrics.BuildDefaultTarget(registerIP, prometheusPort)))
if err != nil { if err != nil {
return errs.WrapMsg(err, "etcd put err") return errs.WrapMsg(err, "etcd put err")
@ -176,7 +175,17 @@ func Start[T any](ctx context.Context, discovery *conf.Discovery, prometheusConf
return err return err
} }
// todo
//err = client.Register(
// ctx,
// "prometheus"+rpcRegisterName,
// registerIP,
// port,
// grpc.WithTransportCredentials(insecure.NewCredentials()),
//)
err = client.Register( err = client.Register(
ctx,
rpcRegisterName, rpcRegisterName,
registerIP, registerIP,
port, port,