Linux安装Zookeeper
zookeeper是一个分布式协调工具,可以实现注册中心功能
zookeeper服务器取代Eureka服务器,zk作为服务注册中心
windows安装可以看www.kylin.show/1129.html
Zookeeper官网zookeeper.apache.org/
下载地址zookeeper.apache.org/releases.ht…
下载后安装上传到Linux系统中,解压即可tar -zxvf 压缩包名
解压zookeeper,运行/bin/zkServer.sh ,初次运行会报错,**没有zoo.cfg配置文件。**将zoo_sample.cfg复制一份并改名成zoo.cfg即可
接着cd到bin目录sh zkServer.sh start运行zookeeper,运行在2181端口。(记得开放端口)
sh zkServer.sh status查看运行状态
使用sh zkCli.sh连接zookeeper
安装完成!
- 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
- 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
- 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
- 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
- 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
- 删除文件: delete /zk 将刚才创建的 znode 删除
- 退出客户端: quit
- 帮助命令: help
当前只有zookeeper一个节点
服务提供者注册
新建cloud-provider-payment8004
pom
<dependencies>
<dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.kylin</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<!--添加zookeeper3.4.14版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
yml
#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
port: 8004
#服务别名---注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: icloud.kylin.show:2181 #zookepper服务地址
主启动类
使用@EnableDiscoveryClient注解,该注解1.可以获取服务信息,2.用于向consul或者zookeeper作为注册中心的时候提供注册服务。
@SpringBootApplication
//用于向consul或者zookeeper作为注册中心的时候提供注册服务
@EnableDiscoveryClient
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
controller
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/payment/zk")
public String paymentzk(){
return "SpringCloud with zookeeper:" + serverPort+"\t"+ UUID.randomUUID().toString();
}
}
测试
启动进行测试
ls /查看zookeeper,多了一个services节点
查看该节点ls /services
注册成功,继续深挖
可以看到该节点的详细信息,端口号,地址等等
访问http://localhost:8004/payment/zk查看
全部正常,测试成功!
临时节点
服务节点是临时节点还是持久节点?我们先关掉8004,然后等待一段时间,查看zookeeper节点
可以发现已经没有相关信息了,是临时节点
重新启动,查看节点
成功注册,并且有了一个新的流水号
服务消费者注册
新建cloud-consumerzk-order80
pom
<dependencies>
<dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.kylin</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<!--先排除自带的zookeeper3.5.3-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.14版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
yml
server:
port: 80
spring:
application:
name: cloud-consumer-order
cloud:
#注册到zookeeper地址
zookeeper:
connect-string: icloud.kylin.show:2181
主启动类
@EnableDiscoveryClient这里作用是如果要用到服务发现功能
@SpringBootApplication
@EnableDiscoveryClient//这里作用是如果要用到服务发现功能
public class OrderZKMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderZKMain80.class,args);
}
}
RestTemplate
配置RestTemplate,编写ApplicationContextConfig类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced//使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
controller
使用RestTemplate调用服务
@RestController
@Slf4j
public class OrderZKController {
public static final String INVOKE_URL = "http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/zk")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result;
}
}
测试
启动ZK80(8004启动)
查看zookeeper注册中心,服务消费者成功注册
访问http://localhost/consumer/payment/zk
成功!
篇幅较短,主要重点是Nacos