Dubbo3应⽤开发第⼀章
1.第⼀个Dubbo程序开发
JDK 与 Dubbo版本对应问题说明
1 | 1. JDK8 与 Dubbo3.1.x以前的版本匹配,在使⽤Zookeeper注册作为注册中⼼时,消费者会出现节点已经存在的异常 |
jdk于spring匹配关系
1 | SpringFramework JDK |
dubbo依赖
1 | <dependency> |
QOS问题
ERROR org.apache.dubbo.qos.server.Server
Address already in use
问题产⽣的原因:
Qos=Quality of Service,qos是Dubbo的在线运维命令,可以对服务进⾏动态的配置、控制及查询,Dubboo2.5.8新版本重构了telnet(telnet是从Dubbo2.0.5开始⽀持的)模块,提供了新的telnet命令⽀持,新版本的telnet端⼝与dubbo协议的端⼝是不同的端⼝, 默认为22222。正是因为这个问题:如果在⼀台服务器⾥⾯,启动provider时22222端⼝,⽽consumer启动时就会报错了。
解决方案:
关闭qos或者修改qos端口
1 | <dubbo:parameter key="qos.enable" value="true"/> |
启动端口冲突问题
provider基于dubbo协议 默认的端⼝是20880 ,但是随着应⽤数量过⼤如果显示指定协议端⼝,会容易造成端⼝冲突所以建议按照如下写法设置端⼝ 。
1 |
|
2.springboot与dubbo3整合
深度封装,把公⽤的配置放置到application.yml中,把个性的配置应⽤注解进⾏设置
引入依赖:
1 | <dependency> |
@EnableDubbo注解的作⽤
- @EnableDubbo ⽤于扫描@DubboService 并把对应的对象实例化,发布成RPC服务。 扫描的路径:应⽤这个注解的类(启动类)所在的包及其⼦包。
- 如果@DubboService注解修饰的类没有放到@EnableDubbo注解修饰类当前包及其⼦包,还希望能够扫描到它该如何处理? 可以通过@DubboComponentScan(basePackages = {“org.suns.service”}),显示的指定扫描的路径。
- yml进⾏配置扫描@DubboService 并把对应的对象实例化,发布成RPC服务。 dubbo.scan.base-packages 等同于 @EnableDubbo
@DubboService注解的作⽤(提供者)
- 应⽤@DubboService注解修饰类型,SpringBoot会创建这个类型的对象,并发布成Dubbo服务。
- @DubboService 等同于 @Component(@Service) @Bean注解的创建对象的作⽤。 通过源码SingletonObjects可以验证。
- @DubboService
a. 创建对象 等同于 @Component(@Service) @Bean
b. 发布成RPC服务
- 后续开发过程中如果考虑兼容性,建议实现类不仅仅要加⼊@DubboService注解,同时也要加⼊@Service注解。
@DubboReference注解的作⽤(消费者)
- 在Consumer端,通过@DubboReference,注⼊远端服务的代理对象。
- @DubboReference类似于原始Spring开发中@Autowired注解的作⽤。
@DubboReference(url = “dubbo://192.168.50.62:20880/com.suns.service.UserService”)