SpringCloud H版 使用zookeeper作为注册中心

SpringCloud H版 使用zookeeper作为注册中心,第1张

SpringCloud H版 使用zookeeper作为注册中心 一、zookeeper作为注册中心

eureka现在已经不更新,如果再继续使用,出现重大BUG就是一个棘手的事情了,当然现在已经推出了更为优秀的nacos作为注册中心,但是zookeeper也是一种备选方案嘛。上一篇文章我们讲解了eureka的使用及注意点,这篇我们接着上篇的继续,将注册中心修改为zookeeper。

上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/121984256

二、准备工作

既然使用zookeeper作为注册中心了,第一步肯定只要有一台zookeeper的服务作为支撑,zookeeper搭建可以参考下面一篇我的博客:

https://blog.csdn.net/qq_43692950/article/details/110648852

还是和上篇文章中讲的一样,在父pom,或者自己的boot项目中声明出SpringCloud的版本:

版本我们采用H版的SR9版本



    4.0.0
    com.bxc
    cloud-demo
    0.0.1-SNAPSHOT
    cloud-parent
    pom

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
        Hoxton.SR9
        0.0.1-SNAPSHOT
    


    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
            org.projectlombok
            lombok
            1.18.16
        

        
        
            com.alibaba
            fastjson
            1.2.62
        

    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            

            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            

        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.7.RELEASE
                
                    com.bxc.clouddemo.CloudDemoApplication
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    



三、服务提供者修改

在pom中引入依赖:


    org.springframework.boot
    spring-boot-starter-web




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



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



    com.bxc
    common
    0.0.1-SNAPSHOT

spring-cloud-starter-zookeeper-discovery自带的zookeeper 包版本比较高,可能和自己安装的版本不一致,我这里用的3.4.x版的,所以排除了原先自带了,添加相应版本 ,添加后会报log4冲突的错误,直接排除掉即可。common是我们上篇博客中讲到的公共的module,大家可以参考上篇博客,也可以不依赖,将controller的返回修改为自定义的即可。

修改配置文件:

server:
  port: 8091
spring:
  application:
    name: provider
  cloud:
    zookeeper:
      connect-string: 127.0.0.1:2181
      discovery:
        instance-host: 127.0.0.1

主启动类修改:

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

启动服务提供者,查看zookeeper中的节点


可以看出服务信息,已经存储在了zookeeper中,此时切换一个端口,再启动一个提供者,在查看zookeeper节点的信息:


provider节点下,就出现两个信息了,这里需要知道的是,provider下的节点信息是临时节点并非持久节点,服务断开链接该节点便不存在,这点和eureka有些许差别,当然这也符合zookeeper cp的理念。

最后编写提供者提供的服务接口:

@RestController
public class ProviderController {

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

    @GetMapping("/getData")
    public ResponseTemplate providerData() {

        return ResSuccessTemplate.builder().data("come from : " + port).build();
    }

    @GetMapping("/getTimeData")
    public ResponseTemplate getTimeData() throws InterruptedException {
        TimeUnit.SECONDS.sleep(5);
        return ResSuccessTemplate.builder().data("come from : " + port).build();
    }

}
四、服务消费者修改

消费者端的pom和配置和提供者相同,可以完全拷贝过来,将端口改为8080,在消费端,我们还是采用ribbon + restTemplate 的方式进行演示,后面我们会讲解feign的具体使用。

声明 RestTemplate

@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

编写测试接口

@RestController
@RequestMapping("/rest/consumer")
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/getData")
    public ResponseTemplate getData() {
        ResponseTemplate responseTemplate = restTemplate.getForObject("http://provider/getData", ResSuccessTemplate.class);
        return responseTemplate;
    }

    @GetMapping("/getTimeData")
    public ResponseTemplate getTimeData() {
        ResponseTemplate responseTemplate = restTemplate.getForObject("http://provider/getTimeData", ResSuccessTemplate.class);
        return responseTemplate;
    }

}

注意,这里的服务是区分大小写的,在eureka中是不分大小写的。

接口测试,在浏览器输入:http://localhost:8080/rest/consumer/getData



已经实现和Eureka相同的效果,但也只修改了少量的配置。

喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5678789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存