hertz-contrib / registry

The service registration & discovery extensions for Hertz
Apache License 2.0
27 stars 39 forks source link

[Error] HERTZ: null instance. serviceName: hertz.test.demo, options: &{map[] true 0 0 0 0 {0 0 <nil>}} #113

Closed ifrans closed 2 weeks ago

ifrans commented 4 weeks ago

使用nacos的时候,客户端会提示null instance错误。 整体应用使用hz 代码生成 server 端:

sc := []constant.ServerConfig{
        *constant.NewServerConfig("192.168.1.55", 8848),
    }

    cc := constant.ClientConfig{
        NotLoadCacheAtStart: true,
    }

    client, err := clients.NewNamingClient(vo.NacosClientParam{
        ServerConfigs: sc,
        ClientConfig:  &cc,
    })

    r := nacos.NewNacosRegistry(client)

    if err != nil {
        return
    }
    addr := ":8888"

    h := server.Default(
        server.WithHostPorts(addr),
        server.WithRegistry(r, &registry.Info{
            ServiceName: "hertz.test.demo",
            Addr:        utils.NewNetAddr("tcp", addr),
        }),
    )

    register(h)
    h.Spin()

client

func test2() {
    nacosClient, err := client2.NewClient()
    if err != nil {
        panic(err)
    }
    cc := constant.ClientConfig{}
    sc := constant.ServerConfig{}

    sc.IpAddr = "192.168.1.55"
    sc.Port = 8848

    var scl []constant.ServerConfig

    scl = append(scl, sc)

    nacosCli, err := clients.NewNamingClient(
        vo.NacosClientParam{
            ClientConfig:  &cc,
            ServerConfigs: scl,
        },
    )

    if err != nil {
        log.Fatal(err)
        return
    }

    r := nacos.NewNacosResolver(nacosCli)

    nacosClient.Use(sd.Discovery(r))

    for i := 0; i < 10; i++ {
        status, body, err := nacosClient.Get(context.Background(), nil, "http://hertz.test.demo/ping", config2.WithSD(true))
        if err != nil {
            hlog.Fatal(err)
        }
        hlog.Infof("code=%d,body=%s\n", status, string(body))
    }
}

nacos控制台

image

运行报错: lbcache.go:135: [Error] HERTZ: null instance. serviceName: hertz.test.demo, options: &{map[] true 0 0 0 0 {0 0 }}

ifrans commented 3 weeks ago

找到问题了,注册需要配置Weight,但是不知道为啥一定要指定

h := server.Default(
        server.WithHostPorts(addr),
        server.WithRegistry(nacosRegistry, &registry.Info{
            ServiceName: "hertz.test.demo",
            Addr:        utils.NewNetAddr("tcp", addr),
            Weight:      10,
        }),
    )
smx-Morgan commented 2 weeks ago

我复现一下看看

smx-Morgan commented 2 weeks ago

这是因为不设置weight值就会默认为0了,而nacos的Weight必须大于等于零,我们会在新版本为nacos设置weight设置默认值,修复这个问题。