学习文档
视频学习
代码演示环境
- Dubbo 3.2.9
- Nacos 2.3.0
一、什么是接口级和应用级
假设有一个服务A,里面提供了2个Dubbo接口XdxOneService、XdxTwoService,Dubbo生产者把服务注册到Nacos(或其它的注册中心)
以应用级别注册,在Nacos上就只看到一个服务名称A(取自 dubbo.application.name)
以接口级别注册,就会看到两个服务
- providers:com.xdx97.dubbo3.api.XdxOneService:1.0.0:
- providers:com.xdx97.dubbo3.api.XdxTwoService:1.0.0:
注:可以同时注册应用级和接口级
1、为什么要有这两种不同的级别,适用场景是什么
Dubbo 最开始只有接口级,应用级出现是为了提升性能
Dubbo生产者把所有的服务信息以接口级别注册到Nacos,假设A服务有100个接口,A服务部署了10份,Nacos就有 100*10 条注册信息
信息变动需要推送给消费者,那么大量的信息,可想而知,对Nacos、消费者都是个负担,会影响系统的运行
还是上面的条件,如果改为应用级就只需要注册 10 条信息,而且每条信息量还要更少(接口级的信息量更全)
应用级情况下,消费者拿到生产者的信息,再通过RPC去请求生产者拿到类似接口级别的信息数据,从功能上是一样的,但解决了Nacos大量数据推送问题
2、默认
- 默认情况下,Dubbo3的生产者是同时注册两种级别,消费者也同时支持这两种消费
- 应用级别出现的目的是为了解决大数量导致的问题,如果规模不大,也可以不用这种方式
- 建议新创建的服务 生产者用 应用级,消费者 指定消费 应用级 (下面讲怎么设置)
二、生产者、消费者 配置应用级和接口级
1、生产者配置
dubbo:
registry:
registerMode: interface
registerMode 的选择 interface
、 instance
、all
all
instance
interface
2、消费者配置
dubbo:
application:
service-discovery:
migration: FORCE_APPLICATION
migration 的选择 FORCE_APPLICATION
、FORCE_INTERFACE
、 APPLICATION_FIRST
- APPLICATION_FIRST 优先应用级,如果没有应用级就会处理 接口级
- 当设置 强制应用或接口级的时候,如果生产者没有对应的级别就会报错
三、其它
1、设置消费者为接口级
有时候我们需要把消费者也注册到Nacos上去,做如下配置
dubbo:
registry:
parameters.register-consumer-url: true
如果设置强制消费应用级(FORCE_APPLICATION),消费者就注册不到Nacos了,不影响服务调用,只是在Nacos看不到
如果没有特别场景要看某个消费者,这也不影响,我们可以通过生产者查看消费者
应用名 为unknown 参看 INF0 receive config info: unknown#racos2-0.nacos2-hea
参考文档
- 应用级服务发现 vs 接口级服务发现
- 如果从接口级服务发现平滑迁移到应用级服务发现
- 使用 Nacos 作为注册中心实现自动服务发现