dubbo 使用 k8s 为注册中心, 消费者@DubboReference providedby 不配置 提示没有服务提供者
我用的 dubbo3.0.7,参考 https://github.com/apache/dubbo-samples/tree/master/dubbo-samples-kubernetes 这个 demo 创建的spring boot 应用,运行一切正常
由于服务可能比较多, 我不太想 像 demo 里面一个个订阅服务 subscribed-services=dubbo-samples-apiserver-provider, 所以我取消了这个配置, 项目依旧可以运行, 但是我不太明白这个地址的配置能有那些, 取消了这个订阅有什么影响?
dubbo.registry.address=kubernetes://DEFAULT_MASTER_HOST?registry-type=service&duplicate=false&namespace=dubbo-demo&trustCerts=true&subscribed-services=dubbo-samples-apiserver-provider
然后在消费接口这里使用的是 @DubboReference(version = "1.0.0", providedBy = "dubbo-samples-apiserver-provider") 这样来引用接口,这里为什么需要声明应用呢? 而且我尝试过不声明应用启动就会提示 没有服务提供者 导致启动失败,如果一个个加providedby, 就显得有点傻
求大佬解惑!!!
这里需要一个服务映射的功能。 因为dubbo本身是没法在消费端侧知道interface对应的appName是什么,在 Kubernetes 体系下,Service 对应的是 appName,没有 appName 就没法做订阅,所以才有了 providedBy 这个参数。 对于一些其他注册中心下的,比如 nacos 默认会开启元数据中心,元数据中心中会存有一份 interface to appName 的映射,所以不需要配 providedBy 参数。但是 Kubernetes 原生体系下没有这个元数据中心。
这里需要一个服务映射的功能。 因为dubbo本身是没法在消费端侧知道interface对应的appName是什么,在 Kubernetes 体系下,Service 对应的是 appName,没有 appName 就没法做订阅,所以才有了 providedBy 这个参数。 对于一些其他注册中心下的,比如 nacos 默认会开启元数据中心,元数据中心中会存有一份 interface to appName 的映射,所以不需要配 providedBy 参数。但是 Kubernetes 原生体系下没有这个元数据中心。
感谢大佬解惑,看到回复还第一时间试过 单独配置一个 元数据中心,居然真的可以... 惊喜, 非常感激
目前试了一下 zk 和 redis 作为元数据中心, 官网连接:
https://dubbo.apache.org/zh/docs/v3.0/references/metadata/
很遗憾的是

这里需要一个服务映射的功能。 因为dubbo本身是没法在消费端侧知道interface对应的appName是什么,在 Kubernetes 体系下,Service 对应的是 appName,没有 appName 就没法做订阅,所以才有了 providedBy 这个参数。 对于一些其他注册中心下的,比如 nacos 默认会开启元数据中心,元数据中心中会存有一份 interface to appName 的映射,所以不需要配 providedBy 参数。但是 Kubernetes 原生体系下没有这个元数据中心。
作为一个使用思维感觉上提个自己的建议,在消费者端指定providedBy没有在服务提供者端指定好,毕竟服务提供者是最知道自己的应用名的,所以可以在暴露出来的interface上带上这个应用名信息,小建议
作为一个使用思维感觉上提个自己的建议,在消费者端指定providedBy没有在服务提供者端指定好,毕竟服务提供者是最知道自己的应用名的,所以可以在暴露出来的interface上带上这个应用名信息,小建议
一个不错的提议,或许我们可以调研下怎么支持
现在的搞法是:
public interface GreetingService {
String sayHello(String name);
}
@Component("annotatedConsumer")
public class GreetingServiceConsumer {
@DubboReference(version = "1.0.0", providedBy = "dubbo-samples-xds-provider")
private GreetingService greetingService;
}
"在消费者端指定providedBy没有在服务提供者端指定好,毕竟服务提供者是最知道自己的应用名的,所以可以在暴露出来的interface上带上这个应用名信息",我觉得这样是比较ok的。 代码上可以改成这样:
@DubboProvidedbBy("dubbo-samples-xds-provider")
public interface GreetingService {
String sayHello(String name);
}
@Component("annotatedConsumer")
public class GreetingServiceConsumer {
@DubboReference(version = "1.0.0")
private GreetingService greetingService;
}
look at this https://github.com/apache/dubbo/pull/11390