Zookeeper服务注册中心
SpringCloud
zookeeper中的节点是持久还是临时的?
答:临时的。
服务挂了,服务节点就没了。
安装Zookeeper
有win版
docker pull zookeeper3.5.2
docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest
# 进入容器
docker exec -it id /bin/bash
# 进到services
cd services
ls
#可查看服务的名字
不需要server端:
服务提供者
依赖:zookeeper-discovery是基于SpringCloud依赖的
<!-- zookeeper -->
<zookeeper.version>3.4.14</zookeeper.version>
<!--添加zookeeper3.4.9版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<!--先排除自带的zookeeper3.5.3,如果zookeeper版本是3.4.x的话会jar冲突-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.9版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<exclusions>
<!--排除zookeeper自带的slf4j,不然有引用slf4j会jar冲突-->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
配置yml文件
server:
# 8004表示注册到zookeeper服务器的支付服务提供者端口号
port: 8004
spring:
application:
# 服务别名---注册zookeeper到注册中心的名称
name: cloud-provider-payment
cloud:
zookeeper:
# 默认localhost:2181
connect-string: localhost:2181
启动类添加**@EnableDiscoveryClient**,该注解用于向使用consul或者zookeeper作为注册中心时注册服务
服务消费者
依赖配置一样,消费者使用RestTemplate调用服务提供者接口,@LoadBalanced实现集群负载均衡,轮询。
/**
* @author zzyy
* @date 2020-02-18 17:27
**/
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
/**
* @author zzyy
* @create 2020-02-18 17:23
**/
@RestController
@Slf4j
public class OrderZkController {
public static final String INVOKE_URL = "http://cloud-provider-payment"; //提供者服务名字,前提是消费者和提供者都要注册到注册中心
@Resource
private RestTemplate restTemplate;
/**
* http://localhost/consumer/payment/zk
*
* @return
*/
@GetMapping("/consumer/payment/zk")
public String paymentInfo() {
return restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
}
}
集群搭建
注册中心集群:connect-string: localhost:2181,ip1:2181,ip2:2181
服务集群保证服务名一致即可。
server:
# 8004表示注册到zookeeper服务器的支付服务提供者端口号
port: 8004
spring:
application:
# 服务别名---注册zookeeper到注册中心的名称
name: cloud-provider-payment
cloud:
zookeeper:
# 默认localhost:2181
connect-string: localhost:2181,ip1:2181,ip2:2181