weaver.toml 内容如下:
[single]
listeners.hello = {address = "localhost:12345”}
运行 hello 单例时,报以下错误:
% SERVICEWEAVER_CONFIG=weaver.toml go run .
2024/01/03 09:08:30 listener hello (in the config) not found
exit status 1
可能是 Service Weaver 目前使用的人不够多,所以没有在网上搜索到相关答案。
后来将 Service Weaver 源码中 examples 目录中的 hello 项目进行对比,发现是 main.go 文件中的 weaver.Listener 定义有问题。我的定义是这样的:
type app struct {
...
hello weaver.Listener `weaver:"my_custom_listener_name"`
}
这是官网上自定义监听器名称的示例代码。这段代码的意思是将监听器命名为 my_custom_listener_name。而我的 weaver.toml 文件里定义的监听器名称是 hello(listeners.hello),导致无法匹配,因此报错显示“listener hello (in the config) not found”。
有两种解决办法。
1、删除 main.go 中自定义监听器名称的代码:
type app struct {
...
hello weaver.Listener
}
2、将 main.go 中自定义的监听器名称和 weaver.toml 文件里定义的监听器名称保持一致:
type app struct {
...
hello weaver.Listener `weaver:"hello"`
}
两种方法都可以解决这个问题。