天天看點

springCloud之EurekaEureka是什麼?Eureka服務注冊中心建立微服務項目注冊進Eureka服務中心微服務主機映射名稱修改微服務之際IP資訊修改微服務info内容建構Eureka自我保護機制Eureka服務發現Eureka叢集配置Eureka與Zookeeper好在哪裡

Eureka是什麼?

  • 服務注冊和發現。
  • 隻要所有的服務注冊進Eureka中,大家可以直接去Eureka中找到服務名稱(辨別符),可以直接進行服務調用,不像dubbo還得修改配置檔案。
  • 類似dubbo的注冊中心,比如zookeeper。

Eureka服務注冊中心建立

  • 搭建項目eureka_service
  • application.yml 現在隻是部署一台服務,使用單機模式
    server:
      port: 7001
    
    eureka:
      instance:
        hostname: localhost #eureka服務端的執行個體名稱
      client:
        register-with-eureka: false #false表示不向注冊中心注冊自己
        fetch-registry: false #false表示自己就是注冊中心,職責就是維護服務實力,并不需要檢索服務
        service-url:
          #單機 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址(單機)。http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
               
  • 啟動項配置@EnableEurekaServer
  • <!--eureka-server服務端 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
            <!-- 修改後立即生效,熱部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
               

微服務項目注冊進Eureka服務中心

  • cloud_provider服務注冊到EureKa上
  • cloud_provider的application.yml增加
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7001/eureka
      instance:
        instance-id: cloud_provider8081 #在eureka上顯示自己設定的服務名稱
        prefer-ip-address: true  # 滑鼠移動在eureka上顯示自己的ip
               
  • cloud_provider的啟動項增加@EnableEurekaClient
  • cloud_provider的pom增加
    <!-- eureka用戶端注冊需要引入  -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
               
  • 啟動cloud_provider和eureka_service,成功将cloud_provider注冊到eureka上

微服務主機映射名稱修改

  • 需要修改的樣式圖
    springCloud之EurekaEureka是什麼?Eureka服務注冊中心建立微服務項目注冊進Eureka服務中心微服務主機映射名稱修改微服務之際IP資訊修改微服務info内容建構Eureka自我保護機制Eureka服務發現Eureka叢集配置Eureka與Zookeeper好在哪裡
  • instance:
      instance-id: cloud_provider8081 #在eureka上顯示自己設定的服務名稱
               

微服務之際IP資訊修改

  • 滑鼠移動到Eureka上微服務名稱上面,右下角有IP出現
  • cloud-provider服務提供項目yml中增加:
    prefer-ip-address: true  # 滑鼠移動在eureka上顯示自己的ip
               

微服務info内容建構

  • 滑鼠點選Eureka上微服務名稱,可以跳轉到一個info頁面,裡面有我們自己定義的資訊
  • 父工程parent_project的pom增加
    <build>
            <finalName>parent_project</finalName>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <delimiters>
                            <delimit>$</delimit>
                        </delimiters>
                    </configuration>
                </plugin>
            </plugins>
        </build>
               
  • cloud-provider服務提供者項目
    info:
      app.name: cloud_procider_服務提供者
      company.name: www.xiaoke.com
      build.artifactId: $project.artifactId$
      build.version: $project.version$
               
  • cloud-provider的pom
    <!-- eureka 點選服務名稱跳轉頁面的内容監控 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>1.5.9.RELEASE</version>
            </dependency>
               

Eureka自我保護機制

  • 某一時刻微服務不可用了,Eureka不會立刻清理,依舊會堵蓋微服務的資訊進行儲存,Euraka不會盲目的登出任何健康的微服務或不健康的微服務,使用自我保護摩诃薩,可以讓Eureka叢集更加的健壯、穩定。(好死不如賴活着)
  • 禁用自我保護模式,一般不推薦

    eurka.server.enable-self-preservation = false 

  • 圖檔
    springCloud之EurekaEureka是什麼?Eureka服務注冊中心建立微服務項目注冊進Eureka服務中心微服務主機映射名稱修改微服務之際IP資訊修改微服務info内容建構Eureka自我保護機制Eureka服務發現Eureka叢集配置Eureka與Zookeeper好在哪裡

Eureka服務發現

  • 就是在服務提供方項目中暴露一個端口,供大家通路,檢視注冊到Eureka的服務資訊
  • controller增加
    @Autowired
        private DiscoveryClient discoveryClient;
    
     @RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
        public Object discovery() {
            List<String> list = discoveryClient.getServices();
            System.out.println("**********" + list);
    
            List<ServiceInstance> srvList = discoveryClient.getInstances("CLOUD-PROVIDER");
            for (ServiceInstance element : srvList) {
                System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
                        + element.getUri());
            }
            return this.discoveryClient;
        }
               
  • 通路http://localhost:8081/dept/discovery格式
    {
    services: [
    "cloud-provider"
    ],
    localServiceInstance: {
    host: "192.168.75.1",
    port: 8081,
    metadata: { },
    serviceId: "cloud-provider",
    uri: "http://192.168.75.1:8081",
    secure: false
    }
    }
               

Eureka叢集配置

  • 由于叢集是搭建在三個伺服器上,即:IP不一樣,本地為了墨迹更改hosts模拟三台機器。
    127.0.0.1 www.one.com
    127.0.0.1 www.two.com
    127.0.0.1 www.three.com
               
  • 搭建eureka_service_two,複制eureka_service所有配置
  • 搭建eureka_service_three,複制eureka_service所有配置
  • 更改hostsname, defaultZone
  • eureka_service的yml
    server:
      port: 7001
    
    eureka:
      instance:
        hostname: www.one.com #eureka服務端的執行個體名稱
      client:
        register-with-eureka: false #false表示不向注冊中心注冊自己
        fetch-registry: false #false表示自己就是注冊中心,職責就是維護服務實力,并不需要檢索服務
        service-url:
          #單機 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址(單機)。http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
          defaultZone: http://www.two.com:7002/eureka/,http://www.three.com:7003/eureka//
               
  • eureka_service_two的yml
    server:
      port: 7002
    
    eureka:
      instance:
        hostname: www.two.com #eureka服務端的執行個體名稱
      client:
        register-with-eureka: false #false表示不向注冊中心注冊自己
        fetch-registry: false #false表示自己就是注冊中心,職責就是維護服務實力,并不需要檢索服務
        service-url:
          #單機 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址(單機)。http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
          defaultZone: http://www.one.com:7001/eureka/,http://www.three.com:7003/eureka/
               
  • eureka_service_three的yml
    server:
      port: 7003
    
    eureka:
      instance:
        hostname: www.three.com #eureka服務端的執行個體名稱
      client:
        register-with-eureka: false #false表示不向注冊中心注冊自己
        fetch-registry: false #false表示自己就是注冊中心,職責就是維護服務實力,并不需要檢索服務
        service-url:
          #單機 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址(單機)。http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
          defaultZone: http://www.one.com:7001/eureka/,http://www.two.com:7002/eureka/
               
  • cloud-provider項目修改yml
    eureka:
      client:
        service-url:
          defaultZone: http://www.one.com:7001/eureka
               

Eureka與Zookeeper好在哪裡

  • CAP理論的核心是:一個分布式系統不可能同時很好的滿足一緻性,可用性,分區容錯這三個需求。
    • CA - 單點叢集,滿足一緻性,可用性的系統,通常在可擴充性上不太強大。
    • CP - 滿足一緻性,分區容錯性的系統,通常新跟那個不是特别高。
    • AP - 滿足可用性,分區容忍性的系統,通常可能對一緻性要求低一些。
  • 圖檔
    springCloud之EurekaEureka是什麼?Eureka服務注冊中心建立微服務項目注冊進Eureka服務中心微服務主機映射名稱修改微服務之際IP資訊修改微服務info内容建構Eureka自我保護機制Eureka服務發現Eureka叢集配置Eureka與Zookeeper好在哪裡
    • CA:關系型資料庫
    • CP:非關系型資料庫、Zookeeper
    • AP:Eureka
  • Zookeeper如果有一台挂掉了,剩下的伺服器需要投票選擇一台主伺服器,為了保證資料正常穩定,會臨時停止服務,當投票選擇出一台主伺服器,才可以正常使用,中間造成服務不可用,影響業務系統,不适合高并發項目、電商購物項目。
  • Eureka加入你有三台服務,每台都可以提供服務,服務共享,任何一台挂掉,其他的Eureka都可以正常使用。适合并發項目、電商購物項目。

git位址:[email protected]:Xiaokeworksveryhard/spring_cloud.git

繼續閱讀