简介
ZooKeeper 是一种分布式协调服务,用于管理大型主机。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
使用
安装使用
安装使用不在过多赘述了,一开始做了一半,后来感觉和别人的一样,而且别人的更加专业,就删了,安装步骤在下面的参考文章中有描述
项目中使用
这里主要是被当作注册中心来使用,暂时没有其它的用法
新建Spring Boot项目springcloud-zk-A,pom文件加入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
配置文件application.yml
server:
port: 80
spring:
application:
#服务别名——注册到zookeeper注册中心的名称
name: springcloud-zk-A
cloud:
zookeeper:
connect-string: 111.111.111.111:2181 #linux的ip加暴露的端口号,请填写你自己的
启动类上添加注解:
@EnableDiscoveryClient
启动运行
先启动zookeeper
在linux中,通过减压一会先进入zookeeper/bin目录并启动zookeeper
cd zookeeper-3.4.14/bin/
./zkServer.sh start
启动成功以后,启动项目springcloud-zk-A (记得配置文件的zookeeper地址要填对,安全组,端口,防火墙都要考虑)
进入zookeeper的客户端,并且观察项目服务是否注册成功
./zkCli.sh
ls /
ls /services
ls /services/
最后可以看到我们对应的服务信息
新建项目实现两个服务之间相互调用
新建springboot 项目 springcloud-zk-a,并引入pom文件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<version>2.1.0.RELEASE</version>
<exclusions>
<!-- 先排除自带的zookeeper3.5.3-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<!--添加zookeeper3.4.9版本(引入对应版本的依赖)-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<!-- 工具包-可不加-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.4</version>
</dependency>
</dependencies>
application.yml 配置文件
#端口号
server:
port: 80
spring:
application:
#服务别名——注册到zookeeper注册中心的名称
name: springcloud-zk-a
cloud:
zookeeper:
connect-string: 111.111.111.111:2181 #linux的ip加暴露的端口号,请填写你自己的
在项目的启动类中加入如下注解:
@EnableDiscoveryClient
配置 ribbon 实现服务调用
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //负载均衡 ribbon
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
相互调用的demo
@RestController
public class UserController {
@Autowired
RestTemplate restTemplate;
@Value("${server.port}")
private String port;
@Value("${spring.application.name}")
private String serversName;
public final static String URL="http://springcloud-zk-b";
/**
* 获取服务信息
* @param serverName
* @return
*/
@GetMapping("/getInfo/{serverName}")
public String getInfo(@PathVariable("serverName")String serverName){
if(StrUtil.isBlank(serverName)){
return "请输入正确的服务器名称1";
}
if("a".equals(serverName)){
String result=new String("当前项目:");
result = result+serversName+"端口号:"+port+"当前时间:"+DateUtil.now();
return result;
}else {
return restTemplate.getForObject(URL+"/getInfo/"+serverName,String.class);
}
}
}
模仿springcloud-zk-a 创建springcloud-zk-b 修改配置文件中的服务名和端口号,然后再修改对应的调用的demo
启动服务,相互调用如下:
查看服务信息:
首先去获取当前服务的id
ls /services/springcloud-zk-a
获取服务的具体信息
get /services/springcloud-zk-a/a1dd48ec-0129-4693-a42b-e444333480ed
获取所有服务列表:
ls /services
服务实例之间的相互调用:
项目地址
关于项目的地址,有兴趣的可以自行下载
git@gitee.com:anxc/study-demo-eureka.git
参考文章
https://blog.csdn.net/jiahao1186/article/details/82633588
安装步骤: https://www.hellojava.com/a/92687.html
https://blog.csdn.net/u010391342/article/details/100404588