springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作

1. 项目搭建前了解:
Maven多模块项目可以解决项目中出现多个相同的jar包和service接口以及实体类对象的问题,可以将相同的提取成一个项目来维护管理,然后其他需要用到则只要引用jar包即可使用。
2. 将springboot + dubbo + zookeeper项目进行拆分:
生产者项目(springboot项目,后台service实现类、mapper层、)
消费者项目(springboot项目,controller层、页面)
接口项目(maven项目,专门放service层接口)
实体类和jar项目(maven项目,实体类以及生产者消费者项目共用jar包)
3. 搭建步骤:
(1)Maven多模块需要创建一个父级项目来管理子模块
创建一个maven项目做父模块:
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第1张图片
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第2张图片
maven选择自己本地路径
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第3张图片
(2)创建子模块(接口项目、实体类+jar包项目) :
右击创建好的父级项目名称
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第4张图片
选择Module创建maven项目,过程同上,这里创建两个maven项目分别为:
dubbo-service-api : maven项目,专门放service层接口
dubbo-common : maven项目,实体类以及生产者消费者项目共用jar包
创建完之后的结构:
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第5张图片
(3)创建子模块(生产者、消费者项目) :
右击父级项目名称:选择Module → 选择Spring Initializr 创建springboot项目 →
创建provider(生产者)项目
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第6张图片
我这里使用的是springboot 2.0.7版本
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第7张图片
下一步接着创建consumer(消费者项目):步骤同上
最终项目结构如下图:
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第8张图片
(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
  

创建实体类:实体类需要实现Serializable接口
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第9张图片

2.dubbo-service-api项目:不用配置,只需要创建包结构写service接口即可(包结构与生产者消费者项目包结构保持一致)
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第10张图片
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 (而不是引用的注解,这点需注意)springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第11张图片
启动类的配置:
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第12张图片

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 注解 (这点一定要注意!!!)
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第13张图片
启动类的配置:
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第14张图片

最后启动项目请求即可实现:
访问地址:get http://127.0.0.1:8081/saveUser 返回 10 name
springboot + dubbo + zookeeper 注册中心 + maven多模块项目框架搭建具体操作_第15张图片

8081是consumer端口
8080是provider服务端口

注意provider与consumer中的接口必须【全路径包名】一致,因为zookeeper是分布式节点系统,提供服务是以provider的接口的全路径设置的节点名,如果consumer的接口路径不一致就会找不到提供的服务

你可能感兴趣的:(分布式框架)