Zookeeper服务注册与发现
1. windows环境下安装zookeeper先准备安装包,这里我推荐在Apache官网下载(地址:https://zookeeper.apache.org/releases.html)-点进去下载之后解压,就会得到将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg,直接重命名也可。修改zoo.cfg配置文件,将dataDir=…/zookeeper_data修
·
1. windows环境下安装zookeeper
- 先准备安装包,这里我推荐在Apache官网下载(地址:https://zookeeper.apache.org/releases.html)
- - 点进去
下载之后解压,就会得到
将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg,直接重命名也可。
修改zoo.cfg配置文件,将dataDir=…/zookeeper_data修改成zookeeper安装目录所在的zookeeper_data文件夹(需要在安装目录下面新建一个空的zookeeper_data文件夹),再添加一条添加数据日志的配置,如下图
配置参数说明:
配置项 | 含义 | 说明 |
---|---|---|
tickTime=200 | 心跳时间 | 维持心跳的时间间隔,单位是毫秒 |
在zookeeper所有的时间都是以这个时间为基础单元,进行整数倍配置 | – | – |
initLimit=10 | 初始通信时限 | 用于zookeeper集群,此时有多台zookeeper服务器,其中一个为leader,其他都为Followner |
syncLimit=5 | 同步通信时限 | 在运行时Leader通过心跳检测与Follower进行通信,如果超过syncLimit*tickTime还未收到响应,则认为该Follower已经宕机 |
dataDir=./data | 存储数据的目录 | 数据文件也成为snapshot |
clientPort | 2181 | 端口号(默认2181) |
maxClientCnxns=60 | 单个客户端的最大连接数限制 | 默认60,可以设置为0,表示没有限制 |
autopurge.snapRetainCount=3 | 保留文件的数量 | 默认3个 |
autopurge.purgeInterval=1 | 自动清理快找文件和事务日志的频率 | 默认为0,表示不开启自动清理,单位是小时 |
dataLogDir= | 日志存放路径 | 未指定时日志文件也存在dataDir,为了性能最大化,一般建议把dataDir和dataLogDir放到不同磁盘上 |
启动程序
验证是否安装成功
双击zkCli.cmd
2. 创建项目并注册进Zookeeper
- 新建cloud-provider-payment8004
- 修改pom文件,加上以下依赖
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.zhubayi.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</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.7.0版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.7.0</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>
- 修改配置文件
#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
port: 8004
#服务别名----注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 192.168.111.144:2181
主启动类PaymentMain8004
package com.zhubayi.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author zhubayi
*/
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class,args);
}
}
controller
package com.atguigu.springcloud.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;
import java.util.UUID;
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/zk")
public String paymentzk()
{
return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
- 启动8004注册进zookeeper
去zookeeper客户端查看
可以看到8004端口注册了进来。 - 完整的目录结构
验证测试:http://localhost:8004/payment/zk
查看节点的信息
格式化后
{
"name": "cloud-provider-payment",
"id": "afbf8a81-9e2c-430f-b616-d0b840c7a665",
"address": "zhubayi-computer",
"port": 8004,
"sslPort": null,
"payload": {
"@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
"id": "application-1",
"name": "cloud-provider-payment",
"metadata": { }
},
"registrationTimeUTC": 1625677007132,
"serviceType": "DYNAMIC",
"uriSpec": {
"parts": [
{
"value": "scheme",
"variable": true
},
{
"value": "://",
"variable": false
},
{
"value": "address",
"variable": true
},
{
"value": ":",
"variable": false
},
{
"value": "port",
"variable": true
}
]
}
}
然后去创建服务消费者
- 新建
cloud-consumerzk-order80
- 修改pom文件添加以下的依赖。
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.zhubayi.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</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.7.0版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.7.0</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>
- 修改配置文件
server:
port: 80
spring:
application:
name: cloud-consumer-order
cloud:
#注册到zookeeper地址
zookeeper:
connect-string: 127.0.0.1:2181
- 主启动类
OrderZKMain80
package com.zhubayi.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class OrderZKMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderZKMain80.class,args);
}
}
- 业务类,向容器注入bean
config
package com.zhubayi.springcloud.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;
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //开启负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller
层
package com.zhubayi.springcloud.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class OrderZkController {
public static final String URL="http://cloud-provider-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping("consumer/payment/zk")
public String paymentInfo(){
return restTemplate.getForObject(URL+"/payment/zk",String.class);
}
}
完整文件目录结构
启动80端口,然后去zookeeper
客户端查看
可以看到两个服务成功的注册了进来。
- 访问测试地址:
http://localhost/consumer/payment/zk
成功的拿到了数据!
更多推荐
已为社区贡献2条内容
所有评论(0)