Service Weaver: listener hello (in the config) not found


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"`
}

两种方法都可以解决这个问题。


前一篇:
后一篇:

发表评论