Dubbo学习
Spring Dubbo例子
api
创建实体和服务。在provider和consumer中的pom都要导入api模块。
provider
配置怎么写:

配置写好了,需要一个启动类,来导入配置,然后执行。

log中有这个表示运行成功。

下面log告诉了provider提供的url

补充

consumer
xml配置

启动类编写

问题
qos问题:产生原因启动provider后,provider的telnet协议也占用了22222端口,consumer启动其telnet也要占用22222接口,那么就会导致端口冲突。

这上面的配置要写在application标签内。
如果是springboot则在配置文件中进行以下配置:
dubbo.application.qos.enable=true
dubbo.application.qos.port=33333
dubbo.application.qos.accept.foreign.ip=false
总结

基于SpringBoot的方式
核心思路:深度封装,把公用的配置放置到application.yml中,把个性的配置用注解的方式进行设置。

provider

还要在启动类中添加 @EnableDubbo

consumer

在启动类中同样要最好要加上 @EnableDubbo
注解细节
-
@EnableDubbo注解的作用
用于扫描@DubboService并把对应的对象实例化,发布成RPC服务。扫描路径:应用这个注解的类所在的包及其子包。 -
如果
@DubboService没有放到@EnableDubbo所在的包及其子包下,那么可以用@DubboComponentScan来设定扫描的包。@DubboComponentScan(basePackages = {"com.example.service"}) -
或者在yaml文件中设置。
dubbo: scan: base-packages: com.example.service

@DubboService和@DubboReference参数配置
设置service注册到哪个注册中心
首先在yaml文件中配置注册中心
dubbo:
application:
name: dubbo-springboot-demo-provider
protocol:
name: tri
port: -1
registry:
id: zk-registry
address: zookeeper://127.0.0.1:2181
然后在 @DubboService(registry="zk-registry")那么就将该服务注册到了id为zk-registry的注册中心
共同参数:
- version
- group
- registry
- timeout
- loadbalance: 负载均衡,默认是加权随机负载均衡。
例子:
@DubboService(version = "1.0.0", group = "dev", timeout = 5000)
@DubboReference(version = "1.0.0", group = "dev", timeout = 5000)
Dubbo服务中,接口并不能唯一确定一个服务,只有 接口+分组+版本号 的三元组才能唯一确定一个服务。
😄 什么时候用group来区分?
当同一个接口针对不同的业务场景、不同的使用需求或者不同的功能模块等场景,可使用服务分组来区分不同的实现方式。同时,这些不同实现所提供的服务是可并存的,也支持互相调用。
😄 什么时候用版本来区分?
当接口实现需要升级又要保留原有实现的情况下,即出现不兼容升级时,我们可以使用不同版本号进行区分。
service参数:
-
delay: 如果你的服务需要预热时间,比如初始化缓存、等待相关资源就位等,可以使用
delay参数进行延迟注册。如果是在 Spring 应用中,则delay = n(n > 0)延迟的时间是 Spring 上下文初始化完成后开始算起。@DubboService(delay=5000)应用将延迟 5 秒暴露此服务(应用启动 5s 后发布该服务到注册中心)。或者可以配置全局默认值,让所有服务都延迟 5s 后注册:dubbo: provider: delay: 5000
网络通信

序列化


注册中心
注册中心负责服务地址的注册,查询。相当于目录。
服务提供方和消费方只在启动时与注册中心进行交互,注册中心不负责具体请求的处理(请求转发),压力非常小。
ZooKeeper
Zookeeper的体积非常小(13M),是Apache Hadoop的子项目,可以为大数据领域提供服务。
安装:
- centos上安装JDK11或者大于等于1.8的jdk
- 拷贝apache-zookeeper-3.6.0-bin.tar.gz到opt目录
- 解压安装包
- 重命名,也可以用默认名称
- 在/opt/zookeeper/这个目录下创建zkData和zkLog目录
- 在/opt/zookeeper/conf这个路径,复制一份zoo_sample.cfg文件并重命名为zoo.cfg
- 编辑zoo.cfg,修改dataDir路径,并添加dataLogDir路径的配置
- 启动zookeeper
./zkServer.sh Start - 查看状态
./zkServer.sh status
在dubbo项目中使用zookeeper。
-
在pom.xml中添加zookeeper依赖
对于springboot:1. 如果您是 Dubbo3 3.3 版本及以上用户,请根据如下表格选择组件:
Zookeeper Server 版本 Dubbo 依赖 Dubbo Starter 依赖(SpringBoot用户) 3.4.x 及以下 dubbo-dependencies-zookeeper dubbo-zookeeper-spring-boot-starter 3.5.x 及以上 dubbo-dependencies-zookeeper-curator5 dubbo-zookeeper-curator5-spring-boot-starter 2. 如果您是 Dubbo3 3.2 及以下、Dubbo2 2.7.x 用户:
Zookeeper Server 版本 Dubbo 依赖 Dubbo Starter 依赖(SpringBoot用户) 3.4.x 及以下 dubbo-dependencies-zookeeper 不支持(自行管理) 3.5.x 及以上 不支持(自行管理) 不支持(自行管理) 注意
- Dubbo 3.3.0 版本开始正式支持 JDK 17,如果您使用 JDK 17,则必须选用 dubbo-dependencies-zookeeper-curator5 或 dubbo-zookeeper-curator5-spring-boot-starter 依赖,对应的 Zookeeper Server 推荐是 3.8.0 版本及以上。
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.3.0</version> </dependency> <!-- 仅当 Zookeeper Server 版本是 3.4.x 及以下时,使用此依赖 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-zookeeper-spring-boot-starter</artifactId> <version>3.3.0</version> </dependency> -
在provider的配置文件中添加:
<dubbo:registry address="zookeeper://127.0.0.1:2181" /> -
在consumer的配置文件中添加:
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
上面两个address都是example,以实际情况填写。
高级配置
认证与鉴权
如果 Zookeeper 开启认证,Dubbo 支持指定 username、password 的方式传入身份标识。
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
username: hello
password: 1234
也可以直接将参数扩展在 address 上 address=zookeeper://hello:1234@localhost:2181
分组隔离
通过指定 group 属性,可以在同一个 Zookeeper 集群内实现微服务地址的逻辑隔离。比如可以在一套集群内隔离出多套开发环境,在地址发现层面实现隔离。
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
group: daily1
其他扩展配置
配置连接、会话过期时间
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
timeout: 30 * 1000* # 连接超时时间,默认 30s
session: 60 * 1000* # 会话超时时间,默认 60s