注册中心Zookeeper
Zookeeper是一个分布式协调工具,可以实现注册中心功能
服务提供者8004注册进Zookeeper
和创建80001一样,创建8004的module,在module中仿照8001一样进行
- pom文件:取消Eureka依赖,加入zookeeper依赖包,如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId
<dependency>
- 主启动类:由于是Zookeeper注册,所以没有服务Server端,因此只需要加入@EnableDiscoveryClient注解;
- yml文件:与之前不同的是,此次是向Zookeeper注册,所以yml文件有稍微不同:
#服务别名,注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 服务地址:2181 #zookeeper服务的地址和端口
- 编写一个Controller,当进行服务访问的时候,可以返回响应的端口以及UUID;
- 启动8004,将其注册进Zookeeper:
这个时候会发现报以下错误,这是因为在引入Zookeeper整合依赖的时候会默认携带一个Zookeeper3.5.3Bate版本,与服务器上的Zookeeper版本不一致,所以这个时候就需要将其进行移除,同时将冲突的slf4j依赖进行清除;然后再引入对应版本的Zookeeper依赖;
![image.png](https://img-blog.csdnimg.cn/img_convert/6073cfe193339dc1bf19925810d60dd1.png#clientId=uff276f5c-aecd-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=117&id=u2f6f789c&margin=[object Object]&name=image.png&originHeight=117&originWidth=1252&originalType=binary&ratio=1&rotation=0&showTitle=false&size=30911&status=done&style=none&taskId=u2232fd91-0d72-4745-9338-11ccf36b837&title=&width=1252)
所以更改后的pom文件如下;
<!--spingcloud整合zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!-- 先排除自带的zookeeper3.5.3beta版本-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
运行8004服务,可以将其注册到Zookeeper的服务中
服务节点是临时节点还是持久节点:
临时性,高可用,数据一致性
订单服务注册进Zookeeper
仿照8004进行新建
- 新建8080module;
- 修改pom文件
- 增加启动类
- 编写application.yml配置文件
- 增加RestTemplate配置类
@Configuration
public class ApplicationContextCOnfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 编写Controller,用于访问服务提供者
@RestController
@Slf4j
public class ZKController {
public static final String INVOKE_URL="http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/zk")
public String paymentINfo(){
String result=restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result;
}
}
- 启动8080zk项目,将其注册进Zookeeper,然后通过8080订单消费者访问8004服务提供者;