SpringCloud整合Zookeeper代替Eureka

目录

一、springCloud 整合 zookeeper

二、服务提供者

1.创建cloud-provider-payment8004模块

2.修改pom.xml

3.application.yml

4. 主启动类

5.Controller打印信息

6.存在的问题

7.测试

 o(=•ェ•=)m服务节点是临时节点还是持久节点

三、服务消费者


一、springCloud 整合 zookeeper

  • zookeeper是一个分布式协调工具,可以实现注册中心功能
  • 关闭Linux服务器防火墙后动zookeeper服务器
  • zookeeper服务器取代Eureka服务器,zk作为服务注册中心

二、服务提供者

1.创建cloud-provider-payment8004模块

2.修改pom.xml

添加依赖

cloud-provider-payment8004


    
    
        org.springframework.cloud
        
        spring-cloud-starter-zookeeper-discovery
        
            
                org.apache.zookeeper
                zookeeper
            
        
    
    
        org.apache.zookeeper
        zookeeper
        3.4.9
        
            
                org.slf4j
                slf4j-log4j12
            
        
    

    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
    
    
        com.alibaba
        druid-spring-boot-starter
        1.1.10
    
    
    
        mysql
        mysql-connector-java
    
    
    
        org.springframework.boot
        spring-boot-starter-jdbc
    
    
        org.springframework.boot
        spring-boot-devtools
        runtime
        true
    
    
        org.projectlombok
        lombok
        true
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
    
        com.dkf.cloud
        cloud-api-commons
        ${project.version}
    

3.application.yml

server:
  port: 8004

spring:
  application:
    name: cloud-provider-service
  cloud:
    zookeeper:
      connect-string: 192.168.40.100:2181 # zk地址

4. 主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient	 // 以后用这个就可以了,不用eureka了
public class PaymentMain8004 {
    public static void main(String[] args){
        SpringApplication.run(PaymentMain8004.class, args);
    }
}

5.Controller打印信息

@RestController
@Slf4j
public class PaymentController {

    @Resource
    private PaymentService paymentService;

    @Value("${server.port}")
    private String serverPort;

    @RequestMapping("/payment/zk")
    public String paymentzk(){
        return "springcloud with zookeeper :" + serverPort + "\t" + UUID.randomUUID().toString();
    }
}

6.存在的问题

如果 zookeeper 的版本和导入的jar包版本不一致,启动就会报错,由zk-discovery和zk之间的jar包冲突的问题。

解决这种冲突,需要在 pom 文件中,排除掉引起冲突的jar包,添加和服务器zookeeper版本一致的 jar 包,

但是新导入的 zookeeper jar包 又有 slf4j 冲突问题,于是再次排除引起冲突的jar包



    org.springframework.cloud
    spring-cloud-starter-zookeeper-discovery
    
    
        
            org.apache.zookeeper
            zookeeper
        
    



    org.apache.zookeeper
    zookeeper
    3.4.9
    
    
        
            org.slf4j
            slf4j-log4j12
        
    

7.测试

# 在zk客户端
ls /services # 输入
[cloud-provider-service] #输出
# 继续向下查看
ls /services/cloud-provider-service
# 继续向下,然后get,返回了个json

 o(=•ェ•=)m服务节点是临时节点还是持久节点

(细分有四种节点:临时节点、带序号的临时节点、持久节点、带序号的持久节点 )

临时的!!!(临时节点+缓存)

三、服务消费者

SpringCloud整合Zookeeper代替Eureka_第1张图片

创建测试zookeeper作为服务注册中心的 消费者 模块 cloud-customerzk-order80

主启动类、pom文件、yml文件和提供者的类似

config类,注入 RestTemplate 

@SpringBootConfiguration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced // 继续加上这个
    public RestTemplate getTemplate(){
        return new RestTemplate();
    }
}

@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80{
    public static void main(String[] args) {
        SpringApplication.run(OrderZKMain80.class, args);
    }
}

Controller 

@RestController
@Slf4j
public class CustomerZkController {

    public static final String INVOKE_URL="http://cloud-provider-service"; //和原来一样

    @Resource
    private RestTemplate restTemplate;

    @RequestMapping("/customer/payment/zk")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk",String.class);
        return result;
    }
}

然后就在zk里查到consumer信息了。

关于 zookeeper 的集群搭建,目前使用较少,而且在 yml 文件中的配置也是类似,以列表形式写入 zookeeper 的多个地址即可,而且zookeeper 集群,在 hadoop的笔记中也有记录。总而言之,只要配合zookeeper集群,以及yml文件的配置就能完成集群搭建

后面会用ribbon代替RestTemplate

 

你可能感兴趣的:(JAVA,springcloud,eureka,spring,cloud,java-zookeeper)