这里写自定义目录标题
需求
- 导入所需要的依赖环境
- 抽取出公共的api接口,以及接口需要的实体类
- 将模块根据需求修改成提供者和消费者
依赖环境
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
项目结构
如上图所示,common里面是工具类,service里面是各个服务模块,我要将模块中httpClient的调用方式修改成dubbo的Rpc调用方式。
构建api模块
如上图所示,我们只需要将service下对应的模块在api中再创建一遍,但是此时api模块下只有api接口和实体类。这个api接口就是,httpclient方式中被访问的接口。
至于为什么要api中重新创建一下各个模块呢?因为我已经踩过坑了,一开始呢,我并没有抽取api接口中的实体类,而且api的接口都是写到一个下面的,如下图所示。
这样写会造成什么循环依赖的问题,而且各个模块如果只需要调用其中一个接口,那么它就得把所有的接口都引入。所以,需要将service下面的各个模块在api中都创建一遍,并且api模块下只有Interface(接口)和entity(实体类)。
provider和consumer的创建
我们只需要在接口上添加@DubboService注解就可以了,如下图所示。
最关键的是,provider的配置文件,因为我service的各个模块都是依赖common模块的,所以我将各个配置都写到了common下的模块。
#dubbo 配置信息
dubbo.consumer.version=1.0.0
dubbo.consumer.scope=remote
dubbo.consumer.check=false
dubbo.reference.check=false
dubbo.registry.check=false
dubbo.consumer.retries=1
dubbo.consumer.init=true
dubbo.consumer.timeout=5000
dubbo.registry.simplified=true
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.port=-1
dubbo.protocol.payload=100000000
dubbo.protocol.name=dubbo
dubbo.provider.group=test
dubbo.provider.version=1.0.0
dubbo.provider.scope=remote
dubbo.provider.check=false
dubbo.provider.timeout=5000
我是将provider和consumer所需要的公共配置在了common的配置文件中,然后在privoder中只需要配置
dubbo.application.name= banzhuanren
spring.dubbo.scan= cn.banzhaunren.service
下面是consumer,consumer调用提供者只需要添加一个 @DubboReference如下图
同样在consumer中配置文件中添加这两个配置就可以了
dubbo.application.name= banzhuanren
spring.dubbo.scan= cn.banzhaunren.service