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项目做父模块:
在这里插入图片描述
在这里插入图片描述
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文件中添加子模块关联关系:

  <modules>
       <module>dubbo-service-api</module>
       <module>dubbo-common</module>
       <module>dubbo-provider</module>
       <module>dubbo-consumer</module>
  </modules>

接着在dubbo-service-api项目的pom中添加实体类和jar包依赖(dubbo-common):
这里要注意groupId与父项目的组ID保持一致,

  <dependency>
        <groupId>com.jk</groupId>
        <artifactId>dubbo-common</artifactId>
        <version>1.0-SNAPSHOT</version>
  </dependency>

在生产者和消费者项目中分别添加dubbo-service-api的依赖(由于dubbo-service-api中已经添加过实体类依赖,所以此时只需要将dubbo-service-api添加到生产者和消费者项目中即可):

 <dependency>
        <groupId>com.jk</groupId>
        <artifactId>dubbo-service-api</artifactId>
        <version>1.0-SNAPSHOT</version>
 </dependency>

(5)到这一步maven多模块的搭建已经完成,接下来对各个项目进行配置:
1.dubbo-common项目 (实体类 jar包):
在pom文件中添加 dubbo 和 zookeeper的jar包依赖 :

 <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.4</version>
 </dependency>
 <!--dubbo 依赖 -->
 <dependency>
        <groupId>com.alibaba.spring.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.0.0</version>
 </dependency>
 <!-- zookeeper client依赖 -->
 <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.10</version>
  </dependency>

创建实体类:实体类需要实现Serializable接口
在这里插入图片描述

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的接口路径不一致就会找不到提供的服务

猜你喜欢

转载自blog.csdn.net/weixin_43813267/article/details/85116870