问题?
Zookeeper中注册的是临时节点还是持久节点?
肯定是临时节点啊,当这个服务出现故障,这个节点自动消失,就可以通知到客户端,不然你搞个持久节点,怎么知道你服务还能不能用
服务端配置
1、依赖
- 导入相关架包,注意版本对应
注意:
org.apache.zookeeper
的版本要和服务器上的版本一致,不然会报错,在spring-cloud-starter-zookeeper-discovery
架包中的版本为3.5.3
,如果版本不一致,要排除依赖,重新导入
<dependencies>
<dependency>
<groupId>com.wcong.cloud</groupId>
<artifactId>cloud-common-api</artifactId>
<version>${project.version}</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>
<!-- Zookeeper注册中心jar包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!-- 服务器上的版本相对低一些 -->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zk 3.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-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、yml
- 配置Zookeeper地址
server:
port: 8051
spring:
application:
name: cloud-provider-zk-payment8051
cloud:
zookeeper:
# Zookeeper注册中心地址,集群环境写多个地址
connect-string: ip:2181
3、主启动类
- 启动注解
@SpringBootApplication
@EnableDiscoveryClient
public class ZkProviderApp8051 {
public static void main(String[] args) {
SpringApplication.run(ZkProviderApp8051.class,args);
}
}
4、controller
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/zk")
public Map<String,String> paymentzk(){
Map<String,String> map = new HashMap<>(4);
map.put("code","0000");
map.put("msg","true");
String result = "springcloud with zookeeper:"+serverPort+"\t"+ UUID.randomUUID().toString();
map.put("data",result);
return map;
}
}
相关信息的查看
客户端配置
1、依赖
- 导入具体的架包,注意jar的版本要和Zookeeper的版本对应
<dependencies>
<dependency>
<groupId>com.wcong.cloud</groupId>
<artifactId>cloud-common-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-zookeeper-discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、yml
- 配置Zookeeper地址
server:
port: 80
spring:
application:
name: cloud-consumer-zk-order80
cloud:
zookeeper:
# Zookeeper注册中心地址,集群环境写多个地址
connect-string: ip:2181
3、启动类
- 添加注解
@SpringBootApplication
@EnableDiscoveryClient
public class ZkConsumerApp80 {
public static void main(String[] args) {
SpringApplication.run(ZkConsumerApp80.class,args);
}
}
4、配置RestTemplate
@Configuration
public class HttpConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
5、Controller
@RestController
@Slf4j
@RequestMapping("/api/wcong")
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
/// Zookeeper中的服务节点名称
private final static String BASE_URL = "http://cloud-provider-zk-payment8051/";
@GetMapping("/zk")
public Map getZkData(){
Map forObject = restTemplate.getForObject(BASE_URL + "payment/zk", Map.class);
log.info(">>>>>>>>>> zk consumer 取到了数据 --> {}",forObject);
return forObject;
}
}
测试:http://localhost:80/api/wcong/zk