springboot第七章 结合Dubbo

实现Dubbo分布式框架,需要公共接口maven项目,需要服务提供者springboot项目,需要服务消费者springboot项目。

因为公共接口只有数据类和接口,后期提供者和消费者需要根据maven唯一坐标来导入公共接口项目的jar包,因此公共接口项目是java-maven项目。
服务提供者需要配置 暴露服务,声明服务,故使用springboot+Dubbo 服务消费者需要配置
使用服务,声明服务,故使用springboot+Dubbo

公共接口maven项目

不添加任何jar包,只定义Service公共接口和数据类。
在这里插入图片描述

服务提供者

服务提供者只需要实现接口的实现类,暴露服务即可。
1、导入依赖的jar包
公共接口的jar包
spring-boot-starter 起步依赖
dubbo-spring-boot-starter 起步依赖
dubbo-dependencies-zookeeper 注册中心相关的依赖

问题1:使用dubbo分布式框架需要dubbo,spring-context,netty,javassist,json依赖,日志依赖
解释1:导入dubbo-spring-boot-starter相当于导入了dubbo依赖,spring框架依赖,javassist依赖,netty依赖,fastjson依赖
日志依赖在导入注册中心的时候导入。

在这里插入图片描述
问题2:使用注册中心,需要导入有关注册中心的jar包
解释2:Apache Curator是Apache ZooKeeper的Java / JVM客户端库,Apache ZooKeeper是一种分布式协调服务。它包括一个高级API框架和实用程序,使Apache ZooKeeper更容易和更可靠。它还包括常见用例和扩展(如服务发现和Java 8异步DSL)的配方。
在这里插入图片描述
导入了日志。
2、编写实现类。
在实现类上暴露服务@DubboService(interfaceClass=接口.class,timeout=5000,version=1.0),在springboot的核心配置文件中指明组件扫描器扫描的路径dubbo.scan.base-package=com.wll.service

没有结合springboot时,只写@Service,并在xml包中配置组件扫描器<component-scan base-pacakage=“service包”/

3、声明服务,声明注册中心,定义端口号
在springboot核心配置文件中声明服务,dubbo.application.name=stuservice-provider,声明注册中心 dubbo.registry.address=zookeeper://localhost:2181

没有结合springboot时,只写<dubbo:application name=“服务名称”/> <dubbo:registry address=“zookeeper://localhost:2181”/>

为了避免端口号冲突,server.port=8081
4、在启动类上加上注解@EnableDubbo
注意没有结合springboot时,@Service本身就是@Component,但是DubboService并不是,他只是暴露服务,没有创建Bean对象,将对象放进spring容器中的能力,因此需要加上组件扫描器的使用

@Component <componen-scan
@DubboService @DubboComponentScan
创建bean对象,将对象放入spring容器中

@EnableDubbo是复合注解
在这里插入图片描述
他里面的@DubboComponentScan,同Component组件能力相同。
@EnableDubbo做了两件事,一个是初始化Dubbo核心组件,加载Dubbo配置到内存。另一个是注册BeanPostProcessor,用来扫描@Service和@Reference注解。

服务消费者

1、导入相关的jar包
公共接口的jar包
spring-boot-starter 起步依赖
dubbo-spring-boot-starter 起步依赖
dubbo-dependencies-zookeeper 注册中心相关的依赖
2、编写调用类,调用提供者的类中方法
调用类中有公共接口的成员方法,通过@DubboReference注解给成员变量赋值

@RestController
public class ConsumerController {
    @DubboReference(version="1.0")
    private StuService stuService;
    @GetMapping("/query")
    public Student queryStudentById(Integer id){
        return stuService.queryStudentById(id);
    }
}

在这里插入图片描述
注意这里使用的@DubboReference(interfaceClass = StudentService.class,version = "1.0")是引用远程服务,将服务注入给接口,这个@DubboReference内部的属性要与提供者@DubboService内部的内容对应,不能缺胳膊少腿,如@DubboService中定义版本号为1.0,@DubboReference也必须定义,否则,无法注入。
3、编写springboot核心配置文件
为了避免端口号冲突,server.port=8082
指定服务名称spring.application.name=consumer-application,指定注册中心dubbo.registry.address=zookeeper://localhost:2181

4、在启动类上加上@EnableDubbo注解
@EnableDubbo做了两件事,一个是初始化Dubbo核心组件,加载Dubbo配置到内存。另一个是注册BeanPostProcessor,用来扫描@Service和@Reference注解。

消费者远程调用提供者的方法

开启注册中心
zkServer.cmd
运行提供者启动main方法
运行消费者启动main方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值