Dubbo
dubbo是阿里巴巴的开源的高性能的java RPC框架,现在是Apache基金会的管理与支持之下,可以实现如服务发现、负载均衡、流量调度等服务治理诉求。dubbo的微服务解决方案DNS(dubbo、nacos、sentinel) 官网地址: https://cn.dubbo.apache.org/zh-cn/
dubbo架构
- provider 功能提供者
- consumer 功能调用者、消费者
- commons-api 通用内容,是consumer和provider中,公共使用的实体类、service的接口,通过maven依赖引用的方式,引入到需要的项目中
- registry 注册中心,可用可不用,但是如果有多个provider,做了集群,其中哪个挂了,consumer调用的话就会出问题,而注册中心可以做健康检查,通过负载均衡的轮询或者其它机制,调用健康的provder,保证服务的正常调用。
spring直连方式consumer调用provider
这里开始采用spring的方式,手动通过xml文件,发布接口
dubbo父工程
目录结构:
- 父工程引入的依赖:
dubbo-api
通用内容,是consumer和provider中,公共使用的实体类、service的接口,通过maven依赖引用的方式,引入到需要的项目中,不用启动,main方法可以删
- 目录结构
- User
- UserService
dubbo-provider
- 引入依赖
- 目录结构
- UserServiceImpl
- DubboProviderMain
- applicationContext-provider.xml
- 启动服务,观察控制台,发布RPC服务接口成功
springboot直连方式consumer调用provider
直接在dubbo工程下新建两个springboot项目,dubbo-boot-provider和dubbo-boot-consumer
- 目录结构
dubbo-boot-provider
- 目录结构
- 引入依赖
- 配置文件
- UserServiceImpl
- DubboBootProviderApplication 启动类只加了@EnableDubbo表示开启dubbo
- 小结
- 配置类 添加dubbo配置信息
- 要发布的接口,类名上使用
@DubboService
- 启动类添加
@EnableDubbo
dubbo扫描类的方式
- 启动类上面使用
@EnableDubbo
,会自动扫描包及其子包下的@DubboService
修饰的类。 - 使用
@DubboComponentScan
,如果要发布的接口不在@EnableDubbo
的包及其子包下,可以在启动类上面使用@DubboComponentScan(basePackages={"com.wzw.service"})
来显示指定扫描的类。 - 配置文件中通过使用
dubbo.scan.base-packages=com.wzw.dubbobootprovider.service
来指定要扫描的类,等同于@EnableDubbo
dubbo-boot-consumer
- 引入依赖
- 配置文件
- 测试类 消费者就不用启动服务了,直接测试类调用
- 小结
- 配置类
- 调用接口的地方需要使用
@DubboReference
,并指定服务端提供的接口地址
测试
- 启动provider 查看控制台,这里有发布的dubbo的接口,这个接口地址,消费者调用的时候配置在
@DubboReference
执行consumer的测试方法,查看结果
- 这是provider接口的输出,成功调取
- consumer的调用方法输出,也成功获取到返回结果
通过nacos注册中心调用dubbo发布的接口
- 目录结构
- 引入依赖,consumer比provider多一个web依赖,其它的依赖都是一样的,通过consumer的controller来测试的,如果还是测试类测试的话,不引入web也行
- 配置文件,consumer和provider的配置文件也是一样的,也可以配置其它参数,但是这里只是简单测试,只需要配置nacos的地址就行
- provider的代码,service类用的是@DubboService,然后启动类记得加@EnableDubbo
- consumer代码,service类用的是@DubboReference
- 启动调用接口 调用返回成功,查看控制台输出也是正常
dubbo-admin
- dubbo-admin管理平台,是图形化的服务管理页面,从注册中心获取所有提供者和消费者进行配置管理。没有正式发行。官方介绍
- dubbo-adminq其实就是一个项目,前端是vue,后端是springboot,部署运行就可以