zookeeper代替eureka與springcloud整合


注冊中心 zookeeper:

  • zookeeper是一個分布式協調工具,可以實現注冊中心功能
  • 關閉Linux服務器防火牆后啟動zookeeper服務器
  • zookeeper服務器取代Eureka服務器,zk作為服務注冊中心
  •  

     

     

     

     1、支付服務注冊進zookeeper

  • 1.1 創建module cloud-provider-payment8004
  •  

     1.2 引入zookeeper依賴,代替eureka

  • <?xml version="1.0" encoding="UTF-8"?>
    <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>cloud2020</artifactId>
            <groupId>com.atguigu.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-provider-payment8004</artifactId>
    
        <dependencies>
            <!--springboot整合zookeeper客戶端-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            </dependency>
            <!--Springboot整合web組件-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--引入自定義的api通用包,可以使用payment支付Entity-->
            <dependency>
                <groupId>com.atguigu.springcloud</groupId>
                <artifactId>cloud-api-commons</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    1.3 寫application.yml
  • #8004表示注冊到zookeeper服務器的支付服務提供者端口號
    server:
      port: 8004
    
    #服務別名----注冊zookeeper到注冊中心名稱
    spring:
      application:
        name: cloud-provider-payment
      cloud:
        zookeeper:
          connect-string: 192.168.88.131:2181
     
    1.4主啟動
  • package com.atguigu.springcloud;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient  //該注解用於想使用consul或者zookeeper作為注冊中心時注冊服務
    public class PaymentMain8004 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain8004.class,args);
        }
    }
     
    1.5業務類
  • package com.atguigu.springcloud.controller;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.UUID;
    
    @RestController
    @Slf4j
    public class PaymentController {
        @Value("${server.port}")
        private String serverPort;
    
        @GetMapping(value = "/payment/zk")
        public String paymentzk(){
            return "springcloud with zookeeper:"+serverPort+"\t"+ UUID.randomUUID().toString();
        }
    }
     
    1.6 ./zkCli.sh啟動客戶端,然后啟動8004注冊進zookeeper
  •  

     

  • 會發現啟動類報錯了,這是環境的問題。引入zookeeper依賴自帶3.5.3 beta版,而我使用的是3.4.14,版本沖突了。
  •  

     

  •  

    解決辦法:修改pom依賴,排除3.5.3版本的,並引入3.4.14版本的 

  •  

     PS: 新版本的zookeeper還會遇到slf4j和log4j包沖突的問題,此時在zookeeper去掉slf4j的依賴

  •  

     

     

     這樣,微服務提供者 支付模塊就入駐進zookeeper服務器

  • 1.7 驗證測試
  •  

     java程序在windows系統,服務注冊中心在centos系統,說明程序調試成功。

  • 繼續深挖測試:

  •  

     微服務作為一個znode節點放到zookeeper服務器上,這一大串就是在zookeeper上的基本信息的json串,就能看到zookeeper上8004微服務提供者的相關信息

  •  

     zookeeper作為服務注冊中心,微服務作為節點注冊進來,那這個節點是臨時還是持久?
    關於Eureka我們知道,偶爾有一時刻服務提供者出了點故障,Eureka會開啟自我保護機制,微服務不會被刪除,那現在關閉8004試一下zookeeper中的服務會有什么變化嗎

  •  

     可以看出,Zookeeper也是在一定時間內,不會剔除服務,超時才剔除,所以zookeeper具備的服務節點是臨時的。當你再啟動8004時,zookeeper還會自動監聽服務狀態,但是流水號是一個新的流水號。

  • 2.訂單服務注冊進zookeeper

    2.1 創建module cloud-consumerzk-order80
  •  

     2.2 pom.xml

  • <?xml version="1.0" encoding="UTF-8"?>
    <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>cloud2020</artifactId>
            <groupId>com.atguigu.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-consumerzk-order80</artifactId>
    
        <dependencies>
            <!--springboot整合zookeeper客戶端-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
                <!--排除自帶的zookeeper-->
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--添加zookeeper3.4.14版本-->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.14</version>
                <exclusions>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--springboot整合web組件-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
     
    2.5 業務類
  •  

     

     

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM