此文主要记录springcloud的zookeeper的注册与发现,没有过多解释,只是为了提供后期拷贝使用
主要模块分为:
0.父工程模块:主要用来作为版本管理
1.公共模块Common-API:用来封装其他模块的共同的功能,比如bean类,共同的异常处理等
2.服务提供者:ZookeeperClientProvider8001,ZookeeperClientProvider8002
3.服务消费者:ZookeeperClientConsumer80
具体配置如下:
父工程(只有pom.xml)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qwy</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>EurekaServer7001</module>
<module>Common-API</module>
<module>EurekaServer7002</module>
<module>EurekaClientProvider8001</module>
<module>EurekaClientConsumer80</module>
<module>EurekaClientProvider8002</module>
<module>ZookeeperClientProvider8001</module>
<module>ZookeeperClientProvider8002</module>
<module>ZookeeperClientConsumer80</module>
</modules>
<!--表明是父工程-->
<packaging>pom</packaging>
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>2.2.2</mybatis.spring.boot.version>
<mybatis.plus.boot.version>3.5.2</mybatis.plus.boot.version>
</properties>
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>2.7.6</version>
</dependency>-->
<!--spring boot 2.7.6-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 2021.0.5-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
公共模块Common-API
参照https://blog.csdn.net/qwy715229258163/article/details/128279999?spm=1001.2014.3001.5501
服务提供者ZookeeperClientProvider8001
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ZookeeperClientProvider8001</artifactId>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--自己的jar-->
<dependency>
<groupId>com.qwy</groupId>
<artifactId>Common-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--先排除自带的zookeeper3.5.3-->
<!-- <exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>-->
</dependency>
<!--添加zookeeper3.8.0版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
application.yml
server: ##服务端口
port: 8001
spring:
application: #服务别名----注册zookeeper到注册中心名称
name: zookeeper-client-provider
cloud:
zookeeper:
connect-string: 192.168.213.101:2181
discovery:
enabled: true
datasource: ##数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: admin
主启动类
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author:齐
* @Package:com.qwy
* @Project:springcloud1
* @name:ZookeeperClientProvider8001
* @Date:2022/12/12 0:16
* @Filename:ZookeeperClientProvider8001
*/
@SpringBootApplication
@EnableDiscoveryClient//该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class ZookeeperClientProvider8001 {
public static void main(String[] args) {
SpringApplication.run(ZookeeperClientProvider8001.class,args);
}
}
mapper代理接口
package com.qwy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qwy.bean.Users;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author:齐
* @Package:com.qwy.mapper
* @Project:springcloud1
* @name:UsersMapper
* @Date:2022/12/11 21:49
* @Filename:UsersMapper
*/
@Mapper
public interface UsersMapper extends BaseMapper<Users> {
}
服务接口
package com.qwy.service;
import com.qwy.bean.Users;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author:齐
* @Package:com.qwy.service
* @Project:springcloud1
* @name:OrderService
* @Date:2022/12/11 21:47
* @Filename:OrderService
*/
@Transactional
public interface UsersService {
boolean save(Users users);
Users findById(Long id);
}
服务实现类
package com.qwy.service.impl;
import com.qwy.bean.Users;
import com.qwy.mapper.UsersMapper;
import com.qwy.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Author:齐
* @Package:com.qwy.service.impl
* @Project:springcloud1
* @name:UsersServiceImpl
* @Date:2022/12/11 21:50
* @Filename:UsersServiceImpl
*/
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersMapper usersMapper;
@Override
public boolean save(Users users) {
int insert = usersMapper.insert(users);
return insert>0?true:false;
}
@Override
public Users findById(Long id) {
return usersMapper.selectById(id);
}
}
业务控制器
package com.qwy.controller;
import com.qwy.bean.Code;
import com.qwy.bean.CommonResult;
import com.qwy.bean.Users;
import com.qwy.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
/**
* @Author:齐文勇
* @Package:com.qwy.controller
* @Project:springcloud1
* @name:UsersController
* @Date:2022/12/11 21:51
* @Filename:UsersController
*/
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
private UsersService usersService;
@Value("${server.port}")
private String port;
@PostMapping
public CommonResult save(@RequestBody Users users){
boolean save = usersService.save(users);
return new CommonResult(save? Code.SAVE_OK:Code.SAVE_ERR,save);
}
@GetMapping("/{id}")
public CommonResult findById(@PathVariable("id") Long id){
System.out.println("port:"+port);
Users users = usersService.findById(id);
Integer code = users != null ? Code.SELECT_OK : Code.SELECT_ERR;
String message = users != null ? "" : "查询失败,请稍后查询";
return new CommonResult(code,users,message);
}
}
服务提供者ZookeeperClientProvider8002
参照服务提供者ZookeeperClientProvider8001
服务消费者ZookeeperClientConsumer80
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ZookeeperClientConsumer80</artifactId>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--自己的jar-->
<dependency>
<groupId>com.qwy</groupId>
<artifactId>Common-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--先排除自带的zookeeper3.5.3-->
<!-- <exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>-->
</dependency>
<!--添加zookeeper3.8.0版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/mydb2
username: root
password: admin
cloud:
zookeeper:
discovery:
enabled: true
connect-string: 192.168.213.101:2181
application: #注册到zookeeper的服务名称
name: zookeeper-client-consumer
主启动类
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author:齐
* @Package:com.qwy
* @Project:springcloud1
* @name:ZookeeperClientConsumer80
* @Date:2022/12/12 2:04
* @Filename:ZookeeperClientConsumer80
*/
@SpringBootApplication
@EnableDiscoveryClient
public class ZookeeperClientConsumer80 {
public static void main(String[] args) {
SpringApplication.run(ZookeeperClientConsumer80.class,args);
}
}
spring配置类
package com.qwy.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Author:齐
* @Package:com.qwy.config
* @Project:springcloud1
* @name:ApplicationConfig
* @Date:2022/12/11 4:04
* @Filename:ApplicationConfig
*/
@Configuration
public class ApplicationConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
mapper代理接口
package com.qwy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qwy.bean.Orders;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author:齐
* @Package:com.qwy.mapper
* @Project:springcloud1
* @name:OrderMapper
* @Date:2022/12/11 3:51
* @Filename:OrderMapper
*/
@Mapper
public interface OrderMapper extends BaseMapper<Orders> {
}
服务接口
package com.qwy.service;
import com.qwy.bean.Orders;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author:齐
* @Package:com.qwy.service
* @Project:springcloud1
* @name:OrdersService
* @Date:2022/12/11 4:00
* @Filename:OrdersService
*/
@Transactional
public interface OrdersService {
boolean save(Orders orders);
Orders findById(Long id);
}
服务实现类
package com.qwy.service.impl;
import com.qwy.bean.Orders;
import com.qwy.mapper.OrderMapper;
import com.qwy.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Author:齐文勇
* @Package:com.qwy.service.impl
* @Project:springcloud1
* @name:OrdersServiceImpl
* @Date:2022/12/11 4:02
* @Filename:OrdersServiceImpl
*/
@Service
public class OrdersServiceImpl implements OrdersService {
@Autowired
private OrderMapper orderMapper;
@Override
public boolean save(Orders orders) {
int insert = orderMapper.insert(orders);
return insert>0?true:false;
}
@Override
public Orders findById(Long id) {
Orders orders = orderMapper.selectById(id);
return orders;
}
}
业务控制器
package com.qwy.controller;
import com.alibaba.fastjson2.JSONObject;
import com.qwy.bean.*;
import com.qwy.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
/**
* @Author:齐文勇
* @Package:com.qwy.controller
* @Project:springcloud1
* @name:OrderController
* @Date:2022/12/11 4:15
* @Filename:OrderController
*/
@RestController
@RequestMapping("/orders")
public class OrderController {
private final String EUREKA_CLIENT_PROVIDER_URL="http://zookeeper-client-provider";
@Autowired
private OrdersService ordersService;
@Autowired
private RestTemplate restTemplate;
@PostMapping
public CommonResult save(@RequestBody Orders orders){
boolean save = ordersService.save(orders);
return new CommonResult(save? Code.SAVE_OK:Code.SAVE_ERR,save);
}
@GetMapping("/{id}")
public CommonResult findOrderAndUserById(@PathVariable("id") Long id){
Orders orders = ordersService.findById(id);
Long usersId = orders.getUsersId();
CommonResult commonResult = restTemplate.getForObject(EUREKA_CLIENT_PROVIDER_URL+"/users/"+usersId, CommonResult.class, usersId);
String josn = JSONObject.toJSONString(commonResult.getData());
Users users = JSONObject.parseObject(josn, Users.class);
ExtendsOrders extendsOrders= new ExtendsOrders();
extendsOrders.setUsers(users);
extendsOrders.setCreateTime(orders.getCreateTime());
extendsOrders.setId(orders.getId());
extendsOrders.setName(orders.getName());
Integer code = orders != null ? Code.SELECT_OK : Code.SELECT_ERR;
String message = orders != null ? "" : "查询失败";
return new CommonResult(code,extendsOrders,message);
}
}
注意:zookeeper的版本