1. 项目搭建前了解:
Maven多模块项目可以解决项目中出现多个相同的jar包和service接口以及实体类对象的问题,可以将相同的提取成一个项目来维护管理,然后其他需要用到则只要引用jar包即可使用。
2. 将springboot + dubbo + zookeeper项目进行拆分:
生产者项目(springboot项目,后台service实现类、mapper层、)
消费者项目(springboot项目,controller层、页面)
接口项目(maven项目,专门放service层接口)
实体类和jar项目(maven项目,实体类以及生产者消费者项目共用jar包)
3. 搭建步骤:
(1)Maven多模块需要创建一个父级项目来管理子模块
创建一个maven项目做父模块:
maven选择自己本地路径
(2)创建子模块(接口项目、实体类+jar包项目) :
右击创建好的父级项目名称
选择Module创建maven项目,过程同上,这里创建两个maven项目分别为:
dubbo-service-api : maven项目,专门放service层接口
dubbo-common : maven项目,实体类以及生产者消费者项目共用jar包
创建完之后的结构:
(3)创建子模块(生产者、消费者项目) :
右击父级项目名称:选择Module → 选择Spring Initializr 创建springboot项目 →
创建provider(生产者)项目
我这里使用的是springboot 2.0.7版本
下一步接着创建consumer(消费者项目):步骤同上
最终项目结构如下图:
(4)项目创建完成后开始建立父模块与子模块之间的关系 以及 子模块之间的关系 (这步很重要!!)
首先在父模块的pom文件中添加子模块关联关系:
dubbo-service-api
dubbo-common
dubbo-provider
dubbo-consumer
接着在dubbo-service-api项目的pom中添加实体类和jar包依赖(dubbo-common):
这里要注意groupId与父项目的组ID保持一致,
com.jk
dubbo-common
1.0-SNAPSHOT
在生产者和消费者项目中分别添加dubbo-service-api的依赖(由于dubbo-service-api中已经添加过实体类依赖,所以此时只需要将dubbo-service-api添加到生产者和消费者项目中即可):
com.jk
dubbo-service-api
1.0-SNAPSHOT
(5)到这一步maven多模块的搭建已经完成,接下来对各个项目进行配置:
1.dubbo-common项目 (实体类 jar包):
在pom文件中添加 dubbo 和 zookeeper的jar包依赖 :
org.projectlombok
lombok
1.18.4
com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0
com.101tec
zkclient
0.10
2.dubbo-service-api项目:不用配置,只需要创建包结构写service接口即可(包结构与生产者消费者项目包结构保持一致)
3.dubbo-provider(生产者)项目:
application.properties 文件配置:
#配置数据源
spring.datasource.url=jdbc:mysql://localhost:3306/idea_demo1?useUnicode=true&characterEncoding=utf8&useSSL=true&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mapper
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#配置dubbo服务提供者
#服务名称
spring.dubbo.application.name=provider
spring.dubbo.server=true
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo 协议
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
生产者项目需要注意:
service实现类注解:
@Service 为dubbo的
@Component 为Spring的
service实现类注入mapper用@Autowired (而不是引用的注解,这点需注意)
启动类的配置:
4.dubbo-consumer(消费者)项目:
application.properties 文件配置:
#为防止和生产者端口号冲突
server.port=8081
#配置dubbo消费者
spring.dubbo.application.name=consumer
#配置注册中心
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo协议
spring.dubbo.procotol.name=dubbo
spring.dubbo.procotol.port=20880
#消费者启动检测生产者是否已启动,当值为true时才会检测,默认为true
spring.dubbo.consumer.check=false
#roundrobin轮询机制
#random #随机机制
#leastactive #最少活跃调用数机制
spring.dubbo.reference.loadbalance=roundrobin
消费者项目需要注意:
在controller层注入UserService要用 @Reference 注解 (这点一定要注意!!!)
启动类的配置:
最后启动项目请求即可实现:
访问地址:get http://127.0.0.1:8081/saveUser 返回 10 name
8081是consumer端口
8080是provider服务端口
注意provider与consumer中的接口必须【全路径包名】一致,因为zookeeper是分布式节点系统,提供服务是以provider的接口的全路径设置的节点名,如果consumer的接口路径不一致就会找不到提供的服务