springcloud費話之Eureka基礎

目錄:html

springcloud費話之Eureka基礎java

springcloud費話之Eureka集羣web

springcloud費話之Eureka服務訪問(restTemplate)面試

springcloud費話之Eureka接口調用(feign)spring

springcloud費話之斷路器(hystrix in feign)docker

springcloud費話之配置中心基礎(SVN)apache

springcloud費話之配置中心客戶端(SVN)數組

 

懂分佈式的理論和作過度布式(多年前),卻感受在當下的面試對於springcloud要求太多springboot

 

做爲一個微服務分佈式的架構,標準造成的太多又太快,不少東西不用去關心了,確實方便了一些,然而,並不是全部公司都有相似的項目服務器

或者說並不是全部人都有相關的項目經驗

 

多說無用,累

 

springcloud是什麼?本身去找吧

 

1、Eureka是什麼?咋用的,什麼地位呢?

 

在一個分佈式架構中,都會涉及到負載均衡和集羣,最先出現的時候,我肯定有10臺機器做爲集羣,那麼就知道這10臺機器的ip和端口,因而乎

會將10臺機器的ip和端口都寫在須要調用的代碼中,輪詢使用,造成最先期的負載均衡了。

 

然而,當下來講,雲服務和虛擬機比較廣泛,又能夠用docker進行容器化,細分割,服務微小化,解耦和獨立運做性更強,同時還要兼顧集羣的

橫向擴容,因而,集羣中一共有幾臺服務器,每臺服務器的配置如何,就是一個變數,所以須要一個服務的註冊和發現的中心了。

 

Eureka本意爲:發現的驚歎感受,的意思。固然是用的是springboot爲基礎,通信協議是用的依然是http,對於其心跳機制來肯定每一臺服務器的

健康情況,這些咱們沒必要在乎,同時新的Eureka客戶端會請求Eureka服務器,告訴對方本身來了,自動添加進集羣,因而集羣中就多了一員。

這種標準的服務發現和註冊機制,造成的標準化結構,即爲Eureka了。

 

 

2、Eureka的原理和做用

 

如下圖爲盜用,有意見聯繫我(我會重畫一張同樣的!!!)

 

一個Eureka集羣,簡單的分爲Eureka服務器(Eureka Server)和Eureka客戶端(Eureka Client)兩個部分。

 

其中Eureka服務器一般爲2臺或者以上,最好進行物理分離,以達到整個集羣容災的效果。提升可用性,下降總體掛掉的可能性。

Eureka客戶端,實際上就是應用,每一個應用都寫在客戶端中,客戶端數量爲多個,那麼每次請求的時候,只要知道客戶端的名稱,

便可以從Eureka服務器中或者該客戶端的每一個地址,選擇一個進行調用,即完成了集羣的請求。

 

那麼具體要選擇哪個,爲什麼不少示例代碼中都是從該客戶端數組List中只取(0)第一個來使用呢?

那只是示例代碼,別太當真。若是該服務是須要集羣中的一個服務器來解決,那麼選擇任意一個,都是能夠的,第幾個,能夠用

隨機數來計算得出。若是請求全部,能夠理解爲一種分佈式了,好比10個客戶端,每一個去進行一個任務隊列的十分之一,再將結果

整合回來統計,這東西和大數據的併發請求方式實際上就是一個東西了。

 

3、Eureka的上手

 

一、版本

 

首先找到spring的官網,找到Eureka的示例,在https://spring.io/projects中找到springcloud,而後在地步找到quick start,操做如圖,

在下面展開的選項卡中找到Eureka server,以下圖

 

而後點擊 頁面最下方的

獲得內容以下圖:

 

應用此信息修改pom,修改內容包括:parent,dependency,刪掉junit,我通過修改後的pom以下:

 只貼了server的pom,其中client的依賴也在其中,注意註釋

<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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.lyh</groupId>
    <artifactId>lyh-eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>lyh-eureka-server</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <!-- SR2會報錯,未解決 -->
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- web的jar -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- eureka server的jar, 做爲client也須要 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!-- eureka client的jar -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
                                 

 

 

2.配置文件

建立resources而且buildpath,編寫application.yml配置文件,以下:

server的yml

server:
  port: 9010
  
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      
spring:
  application: 
    name: eureka-server

 

client的yml

server:
  port: 9020

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9010/eureka/
  
spring:
  application:
    name: eureka-client

 

3.server和client的啓動類

 編寫server的啓動類,代碼以下:

package com.lyh.lyh_eureka_server;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerRun { public static void main(String[] args) { SpringApplication.run(EurekaServerRun.class, args); } }

 

編寫client的啓動來,代碼以下:

package com.lyh.lyh_eureka_server;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class EurekaClientRun { public static void main(String[] args) { SpringApplication.run(EurekaClientRun.class, args); } }

 

4.啓動並訪問

先啓動server,而後啓動client,訪問server的地址:http://localhost:9010,結果以下圖則爲正確:

 

 5.一些問題

 

client的name註冊入server的時候,會自動轉爲大寫

紅字表示client的心跳維持時間在90秒以上,將會自動刪除該註冊,是一種server的保護機制

將server中的yml自我保護機制修改,配置文件修改以下:

server:
  port: 9010
  
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server: 
    enable-self-preservation: false

spring:
  application: 
    name: eureka-server

 

 修改之後,頁面提示會發生變化,表示保護機制已經關閉,以下圖

 

 

 

以上!

相關文章
相關標籤/搜索