目录
二、SpringCloud整合Zookeeper代替Eureka
(1)新建模块cloud-provider-payment8004
(2)新建消费者模块cloud-consumerzk-order80

如果 zookeeper 的版本和导入的jar包版本不一致,启动就会报错,由于zk-discovery和zk之间的jar包冲突的问题。
下图给出的是spring-cloud-starter-zookeeper-discovery所引入的zookeeper jar包版本,可在父pom中找到,如果自己的zoookeeper版本和其一致,可不用修改。

pom.xml
解决这种冲突,需要在 pom 文件中,排除掉引起冲突的jar包,添加和服务器zookeeper版本一致的 jar 包,但是新导入的 zookeeper jar包 又有 slf4j 冲突问题,于是再次排除引起冲突的jar包
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>cloud2020artifactId>
- <groupId>springcloudgroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
- <modelVersion>4.0.0modelVersion>
-
- <artifactId>cloud-provider-payment8004artifactId>
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
-
- <exclusions>
- <exclusion>
- <groupId>org.apache.zookeepergroupId>
- <artifactId>zookeeperartifactId>
- exclusion>
- exclusions>
- dependency>
-
- <dependency>
- <groupId>org.apache.zookeepergroupId>
- <artifactId>zookeeperartifactId>
- <version>3.5.7version>
-
- <exclusions>
- <exclusion>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-log4j12artifactId>
- exclusion>
- exclusions>
- dependency>
-
-
- <dependency>
-
- <groupId>springcloudgroupId>
- <artifactId>cloud-api-commonsartifactId>
- <version>${project.version}version>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-actuatorartifactId>
- dependency>
-
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-devtoolsartifactId>
- <scope>runtimescope>
- <optional>trueoptional>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- dependencies>
-
- project>
application.yml
- server:
- port: 8004
-
- spring:
- application:
- name: cloud-provider-payment
- cloud:
- zookeeper:
- connect-string: 192.168.16.104:2181 # zk地址 192.168.16.104是linux地址
主启动类
- @SpringBootApplication
- @EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
- 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(value = "/payment/zk")
- public String paymentzk(){
- return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
- }
- }
测试
然后就能在zk里查到注册的服务信息了。

pom.xml,application.yml,主启动类与服务提供者类似
config类,注入 RestTemplate
- @Configuration
- public class ApplicationContextBean {
- @Bean
- @LoadBalanced
- public RestTemplate getRestTemplate(){
- return new RestTemplate();
- }
- }
controller层也是和之前类似:
- public class OrderZKController {
- 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;
- }
- }
测试,成功调用


提取剧透:后面会用ribbon代替RestTemplate