gf icon indicating copy to clipboard operation
gf copied to clipboard

contrib/registry/nacos/v2: panic: duplicate metrics collector registration attempted

Open LanceAdd opened this issue 1 year ago • 7 comments

Go version

go version go1.22.4 darwin/amd64

GoFrame version

2.7.2

Can this bug be reproduced with the latest release?

Option Yes

What did you do?

load remote config from nacos

serverConfig := constant.ServerConfig{
		IpAddr: "172.16.23.99",
		Port:   8848,
	}
	clientConfig := constant.ClientConfig{
		CacheDir:    "/tmp/nacos",
		LogDir:      "/tmp/nacos",
		NamespaceId: "c1e15245-03c1-4cba-9c40-ddc59e4d4167",
	}
	configParam := vo.ConfigParam{
		DataId: "sso.yml",
		Group:  "test",
	}

	adapter, err := nacos.New(ctx, nacos.Config{
		ServerConfigs: []constant.ServerConfig{serverConfig},
		ClientConfig:  clientConfig,
		ConfigParam:   configParam,
	})
	if err != nil {
		g.Log().Fatalf(ctx, `%+v`, err)
	}
	g.Cfg().SetAdapter(adapter)

Register with Nacos

	gsvc.SetRegistry(nacos.New("172.16.23.99:8848",
		constant.WithNamespaceId("c1e15245-03c1-4cba-9c40-ddc59e4d4167"),
		constant.WithUsername("nacos"),
		constant.WithPassword("nacos"),
	).SetGroupName("test"))

When I get the configuration file from Nacos and then register the service with Nacos, I get the following error

panic: duplicate metrics collector registration attempted

goroutine 1 [running]:
github.com/prometheus/client_golang/prometheus.(*Registry).MustRegister(0xc0000b9db0, {0xc0004a0300, 0x2, 0x2})
        /Users/shanyujie/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:403 +0x116
github.com/prometheus/client_golang/prometheus.MustRegister({0xc0004a0300, 0x2, 0x2})
        /Users/shanyujie/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:178 +0x3f
github.com/nacos-group/nacos-sdk-go/v2/common/monitor.init.0()
        /Users/shanyujie/go/pkg/mod/github.com/nacos-group/nacos-sdk-go/[email protected]/common/monitor/monitor.go:34 +0xc5
Exiting.

sso.yml

server:
  address: "0.0.0.0:50001"
  openapiPath: "/api.json"
  swaggerPath: "/doc.html"
  accessLogEnabled: true
  errorLogEnabled: true
  pprofEnabled: false
  logPath: "./log"
  dumpRouterMap: true

What did you see happen?

panic: duplicate metrics collector registration attempted

goroutine 1 [running]:
github.com/prometheus/client_golang/prometheus.(*Registry).MustRegister(0xc0000b9db0, {0xc0004a0300, 0x2, 0x2})
        /Users/shanyujie/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:403 +0x116
github.com/prometheus/client_golang/prometheus.MustRegister({0xc0004a0300, 0x2, 0x2})
        /Users/shanyujie/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:178 +0x3f
github.com/nacos-group/nacos-sdk-go/v2/common/monitor.init.0()
        /Users/shanyujie/go/pkg/mod/github.com/nacos-group/nacos-sdk-go/[email protected]/common/monitor/monitor.go:34 +0xc5
Exiting.

What did you expect to see?

It's okay to just register the service or just get the configuration file, but it can be problematic when both are present

LanceAdd avatar Jul 12 '24 01:07 LanceAdd

Why is the nacos sdk referenced differently in "github.com/gogf/gf/contrib/config/nacos/v2" and "github.com/gogf/gf/contrib/registry/nacos/v2"

github.com/gogf/gf/contrib/registry/nacos/v2

github.com/joy999/nacos-sdk-go

github.com/gogf/gf/contrib/config/nacos/v2

github.com/nacos-group/nacos-sdk-go/v2

This leads to duplicate registrations when obtaining remote configuration files and registering services

LanceAdd avatar Jul 15 '24 02:07 LanceAdd

Have you solved this problem?

wu-weichao avatar Aug 12 '24 01:08 wu-weichao

Have you solved this problem?

I used github.com/nacos-group/nacos-sdk-go/v2 instead of github.com/joy999/nacos-sdk-go, and then combined it with the content of github.com/gogf/gf/contrib/registry/nacos/v2 to write my own library https://github.com/LanceAdd/nacos-gf I hope it can help you

LanceAdd avatar Aug 12 '24 02:08 LanceAdd

Have you solved this problem?

I used github.com/nacos-group/nacos-sdk-go/v2 instead of github.com/joy999/nacos-sdk-go, and then combined it with the content of github.com/gogf/gf/contrib/registry/nacos/v2 to write my own library https://github.com/LanceAdd/nacos-gf I hope it can help you

Thanks

wu-weichao avatar Aug 13 '24 01:08 wu-weichao

Same problem

wilsonliu123 avatar Aug 15 '24 00:08 wilsonliu123

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


Same problem

Issues-translate-bot avatar Aug 15 '24 00:08 Issues-translate-bot

Same problem

The reason for this problem is that nacos-sdk-go is used in config and registry, github.com/nacos-group/nacos-sdk-go/v2 is used in config, but github.com/joy999/nacos-sdk-go is used in registry, which causes multiple initializations of monitor. If you need to, you can use this https://github.com/LanceAdd/nacos-gf temporarily

LanceAdd avatar Aug 15 '24 01:08 LanceAdd

@LanceAdd @wu-weichao @wilsonliu123 Hello guys, this issue seems was fixed in https://github.com/gogf/gf/pull/3745 . Please feel free to submit issue if it does not behave as expected.

gqcn avatar Sep 24 '24 08:09 gqcn