Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

是我的脑子有坑吗? #742

Closed
yangyile1990 opened this issue Apr 8, 2024 · 5 comments
Closed

是我的脑子有坑吗? #742

yangyile1990 opened this issue Apr 8, 2024 · 5 comments

Comments

@yangyile1990
Copy link

yangyile1990 commented Apr 8, 2024

我的注册代码是:

        serviceName := "your-service-2"
	ip := "127.0.0.1"
	port := 8082

	success, err := client.RegisterInstance(vo.RegisterInstanceParam{
		Ip:          ip,
		Port:        uint64(port),
		ServiceName: serviceName,
		Weight:      1,
		Enable:      true,
		Healthy:     true,
	})
	if err != nil {
		panic(err)
	}

我的获取代码是:

        instances, err := client.SelectAllInstances(vo.SelectAllInstancesParam{
		ServiceName: serviceName,
	})
	if err != nil {
		panic(err)
	}
	for _, instance := range instances {
		fmt.Println("Discovered service instance:", instance.Ip, instance.Port, instance.Enable)
	}

这个确实是能查出来。

但是假如我把上面的端口改为8083,运行出来还是8082,但是完全没有报错。除非我把service的名称也改改,换个名称将能将其设置为8083,但设置完依然没法再修改它。

这是为啥?

这是正常的吗?

是我的脑子有坑吗,没法理解。

按我的理解,设置完是什么查出来就该是什么的,假如有缓存就用flush等操作设置,怎么结果他就是,完全不对的,我想破脑袋我也想不明白这是为啥,情绪逐渐暴躁。

莫非设计的时候他就是这样的?

假如不是,就是我用的不对,但是该怎么正确使用呢。给我一个简单的完整的demo吧,让我能设置,能查询。

@yangyile1990
Copy link
Author

按照我的直观理解,这就像是增删改查,注册是增,取消注册是删,再次注册是更新,但是实际上执行起来,跟我的直觉很不一样。

@yangyile1990
Copy link
Author

yangyile1990 commented Apr 8, 2024

当然我也找到了原因,即使是我把nacos服务器卸载,客户端代码删掉重写,结果还是不变,这个时候我开始怀疑缓存的问题。

当我直接用命令行 go run main.go 的时候一切正常,注册完就能查到,取消注册了就查不到,但是当我在GoLand开发工具里,使用右键直接run的时候,就不行。

因为我的缓存被写在了这里

/home/yangyile/.cache/JetBrains/GoLand2024.1/tmp/GoLand/cache/naming/public/DEFAULT_GROUP@@your-service-1

而且我不知道为啥这个缓存只要存在就不会更新,或者说需要等很长时间才能更新(在混乱中我也没发现规律)。

而当我使用 go run main.go 执行的时候,缓存是被写在了这里:

/tmp/go-build312333083/b001/exe/cache/naming/public/DEFAULT_GROUP@@your-service-1

而且运行完以后这个缓存自动消失,或者说,从 /tmp/go-build312333083 以下的东西全部消失。
因而再次运行即不使用缓存,即可每次都得到正确的结果。

即使我已经设置了这样的配置:

cc := &constant.ClientConfig{
		NamespaceId:         "your-namespace",
		TimeoutMs:           5000,
		NotLoadCacheAtStart: true,
		LogDir:              "/tmp/nacos/log",
		CacheDir:            "/tmp/nacos/cache",
		LogLevel:            "debug",
	}

但缓存的文件依然是没有写到我以为的系统的 /tmp/目录下的位置。

接下来请看问题 #743
也是同样的问题。
甚至还有新问题。

@yangyile1990
Copy link
Author

因此出于我个人的体验而言,我强烈建议当用户只需要写个test或者demo的时候,要允许用户不使用任何的缓存文件/日志文件,比如增加个标志位叫做not use disk file 等等情况。而且,假如你要优化代码,你可以选择把客户端的缓存放在一个map里,这样当客户端被杀掉的时候数据一并丢失,而当客户端持续运行时,数据就写在map里,这样其实也能满足很多用户的需求。

但我还是不明白,我明明已经配置了cache的目录,依然是存在问题。

@yangyile1990
Copy link
Author

yangyile1990 commented Apr 9, 2024

在我的mac里也是一样的,虽然我并没有配置让它把数据写到这里,但它还是侵入了我的电脑,在里面留下了不少垃圾文件。

/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/your-namespace/DEFAULT_GROUP@@demo-service
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-0a505118ffc7425d99f2785b010e77b4
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-5360c978f4ad4e868973ed83e8640b39
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-a7d6e625e40a4d2e8bfb199c241f8e1e
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-5b4751edc59c48c8b95f2fa3fa0d2981
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-2-2
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-2
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-cbea2c2db0864f438bb471079a99fafb
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-9c82307b03de44dda07290487450fd96
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-8ae5a42cca544d8faf8293478a7b8b88
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-ec29b199287e471abc084ed281a92bdf
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-54d700256ff741d1bbb16c6a1c060f57
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-f2ca30dcd20d4647b634e2ed4ad2ffe6
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-9d751f302aec45b8b97f13b08774bac2
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-c7d3fd9829e64c128b532914bdd93a61
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/my-namespace/DEFAULT_GROUP@@demo-service-ca07591c3da2480ebc39c0a452fc769a
/System/Volumes/Data/Users/admin/Library/Caches/JetBrains/GoLand2023.3/tmp/GoLand/cache/naming/public/DEFAULT_GROUP@@demo-service

由于存在问题,我一直尝试变换服务名称,这样才能勉强在运行时或者正确的结果。

但我实在是想不通,昨天换了个ubuntu的机器重新装了环境,试了试,也还是一样的,我不明白为什么会出这样的问题。但结论就是,使用 CreateNamingClient 的代码写个main.go ,假如用goland带的右键运行,则缓存就会写到goland的cache里面,而假如使用 go run main.go 则缓存会写到 go build 的某个临时目录里,它们并不能写到正确的位置,即 /tmp/nacos/cache。

@binbin0325
Copy link
Member

binbin0325 commented Apr 11, 2024

看你提供的代码片段,是客户端创建代码有问题(详细看一下redeme和example),另外提issue标题可以描述问题,不要偏激

参考: https://github.com/nacos-group/nacos-sdk-go/blob/master/example/service/main.go

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants