前言
1 使用Zookeeper代替Eureka作为注册中心
1.1 Zookeeper简介
Zookeeper分布式协调工具,可以实现注册中心
Zookeeper节点类型:临时节点
1.3 Zookeeper安装与使用
1.3.1 windows下载Zookeeper
1. 下载与安装
博客详解(别人博客)
2. 修改zkServer.cmd配置文件
3. 下载Zookeeper的图形界面的管理工具ZooInspector工具,解压之后便可使用
4. 进入Zookeeper解压之后的目录,直到bin目录,在该目录输入cmd进入控制台
5. 在控制台运行zkServer.cmd便可开启Zookeeper服务
2 使用Zookeeper作为注册中心步骤
zookeeper作为注册中心与Eureka作为注册中心的区别在于Eureka需要编写一个服务的启动类,但Zookeeper不需要
Zookeeper只需要打开ZooInspector工具,连接服务即可(确保在cmd中运行zkServer.cmd)
2.1 创建会员服务
2.1.1 配置pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<groupId>com.fyzn12</groupId>
<artifactId>springcloud-zk-member</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springcloud-zk-member Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 导入springboot的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 导入springcloud整合feign客户端启动器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 导入springcloud整合Zookeeper启动器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2.1.2 创建application.yml文件
# member服务的端口号
server:
port: 2182
# member服务的别名
spring:
application:
name: zk-member
cloud:
zookeeper:
# member注册到Zookeeper上的地址,也就是注册中心的地址
connect-string: 127.0.0.1:2181
2.1.3 创建Controller作为测试接口
/**
* @author fyzn12
* @version 1.0
* @date 2020/7/26 18:02
* @description:TODO
*/
@RestController
public class ZkController {
@Value("${server.port}")
private String port;
@RequestMapping("/getMember")
public String getMember() {
System.out.println("跳转到会员服务");
return "我是测试zookeeper,端口号"+port;
}
}
2.1.4 创建启动类,这里需要使用@EnableDiscoveryClient注解
/**
* @author fyzn12
* @version 1.0
* @date 2020/7/26 18:18
* @description:TODO
*/
@SpringBootApplication
@EnableDiscoveryClient
public class AppZkMember2 {
public static void main(String[] args) {
SpringApplication.run(AppZkMember2.class,args);
}
}
2.1.5 启动多个member服务作为集群,端口号分别为2182、2183
2.2 创建订单服务
2.2.1 配置pom文件(如上面会员服务)
2.2.2 创建application.yml文件
# 订单服务的端口号
server:
port: 2184
# 订单服务的别名
spring:
application:
name: zk-order
cloud:
zookeeper:
# 订单服务注册到Zookeeper上的地址,也就是注册中心的地址
connect-string: 127.0.0.1:2181
2.2.3 使用feign客户端调用
1. 创建feign客户端调用接口
/**
* @author fyzn12
* @version 1.0
* @date 2020/7/26 18:28
* @description:TODO
*/
@FeignClient("zk-member")
public interface MemberFeign {
@RequestMapping("/getMember")
String getMember();
}
2. 必要说明
- 在创建的feign客户端接口类中必须要使用@FeignClient注解,并且该注解中默认必须给定一个name或者value的值,该值为会员服务的别名,即会员服务配置文件application.yml中指定spring.application.name的值,这里为zk-member.
- 在该接口类中指定需要调用的接口,必须与会员服务的接口名一致(两个一致:1 @RequestMapping指定的地址一致 2 方法名一致)
2.2.4 创建启动类
这里与会员服务不同的是,需要在订单服务的启动类上面多加一个@EnableFeignClients注解,用于开启feign客户端调用
/**
* @author fyzn12
* @version 1.0
* @date 2020/7/26 18:25
* @description:TODO
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class,args);
}
}
2.2.5 创建接口
/**
* @author fyzn12
* @version 1.0
* @date 2020/7/26 18:25
* @description:TODO
*/
@RestController
public class OrderController {
@Autowired
private MemberFeign memberFeign;
@RequestMapping("/getOrder")
public String getOrder(){
//String member = "http:zk-member/getMember";
return memberFeign.getMember();
}
}
2.2.6 测试