开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门:SpringBoot 整合的三种方式】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/624/detail/9471
SpringBoot 整合的三种方式
课程回顾:
之前课程中用.xml 的方式测试了 dubbo 的一些配置,例如“timeout”(超时属性)、”><”(重置次数)、“version”(版本)等,这些相关属性如果以 SpringBoot 方式进行整合,<dubbo:service标签对应@service注解,在标签中可配置属性。Reference的相关配置也在其注解里。
标签里某个 service 里可能单独配了method的详细设置,而注解无法做到。本节课就讲述 Dubbo 和 SpringBoot 整合的其他方式。
与 SpringBoot 整合的三种方式的配置
1、导入 dubbo-starter,在 application.properties 配置属性。
使用@service【暴露服务】,使用@service【引用服务】,使用此方法要注意@EnableDubbo//开启基于注解的Dubbo功能。
其用来指定包扫描规则。在老版本的配置中,也可这样操作:输入dubbo.scan.base-packages=要扫的包:
这样写后便不用开启基于注解的 Dubbo 功能。
(1)保留 Dubbo 的.xml 配置文件,以 user-service 提供者为例,把 user-service 的.xml 配置复制过来,舍弃 application.properties 里的所有配置,还是在provider 里把.xml 里配置,再在 Bootuserservice 中写一个注解,
@ImportResource(locations=“classpath:provider.xml”)
这样暴露 service 也不用进行注解。
(2)在 provider.xml 里将 application name 设置成应用的名字并启动,若观察到注册中心注册有报错:UserServiceImpl2未找到,是由于之前注册多版本时也写了一个 UserService2,将其删除即可。重新启动则可以成功启动。
(3)来到 Dubbo Admin 控制台进行刷新,发现出现提供者,打开应用核验。
2、使用注解 API 的方式,将每个组件手动创建到容器中,
让 Dubbo 来扫描其他的组件
(1)打开 dubbo 官方文档中的注解配置,将所有配置写成一个配置令,将所需的 bean 放在容器中。每一个标签都有与其对应的 config 标签,将 config 组件手动地创建,放在容器中。
如图所示,写一个配置类:手动的将配置文件放进去,相当于替代Dubboapplication 标签。
(2)配置文件里还需要 registry 注册中心的信息,使用代码构建:public RegistryConfig registryConfig()
RegistryConfig registryConfig=new RegistryConfig();
registryConfig.setProtocol(“zookeeper”);
registryConfig.setAddress(“地址”);
return registryConfig,@Bean放在容器中
(3)xml 标签中配有通信的规则,同样使用代码构建:
Public Protocolconfig protocolconfig()
Protocolconfig protocolconfig=new Protocolconfig();
protocolconfig.setName=(“Dubbo”);
protocolconfig.setPort(20882);
return protocolconfig; @Bean放在容器中
再将暴露的服务配置进来:
Public ServiceConfig<userservice> userServiceconfig()
ServiceConfig<userservice> serviceconfig=new serviceconfig<>();
Serviceconfig.setinterface(userservice.class);
Serviceconfig.setref(userservice);
Serviceconfig.setversion(“1.0.0”)
再配置每一个method的信息:
//配置每一个method的信息
MethodConfig methodconfig=new MethodConfig();
methodconfig.setname(“getUserAddressList”);
methodconfig.settimeout(1000);
//将method的设置关联到service配置中
List<methodconfig>methods=new ArrayList<();Methods.add(methodConfig);serviceConfig.setMethods(methods);
List<methodconfig>methods=new ArrayList<>();Methods.add(methodConfig);serviceConfig.setMethods(methods);
这样 service 就配置好了,@Bean 加在容器中。
其他例如 provider、monitor 都有其对应的 config,都可按照上述方法进行配置。
(4)配置好以后,返回官方文档,此时需要来指定一下 Dubbo 的 service 接口的扫描路径,使用@DubboComponent 注解,和前面使用的@Enabledubbo 注解是一样的。
@Enabledubbo(scanBasePackageClasses=“要扫描的包”)
用@service 注解暴露服务后,重新启动测试,刷新控制台,可以看到应用数有1个,即以上创建的 userservice。