Eureka简介与Eureka Server上
生活随笔
收集整理的這篇文章主要介紹了
Eureka简介与Eureka Server上
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Ereka,它是一個服務發現組件,我們為什么要學習Eureka,在SpringCloud里面,他提供了多種服務發現的支持,我們可以使用ZK,我們可以使用Consul服務發現,為什么我們只講Eureka呢,有幾個原因,Eureka他來自于生產環境,SpringCloud對Eureka的支持很好,這兩個原因所以我們先講Eureka,但是都是大同小異的
我們首先來了解一下什么是Eureka,Eurekashi是Netflix開發的一個服務發現框架,是一個基于Rest的服務,SpringCloud用了一個Spring-cloud-netflix,把Eureka集成了,目前Eureka項目非常的活躍,代碼更新的非常的頻繁,目前最新版本是1.5.5,然后2.0也在開發,并且2.0有一些革命性的改進,就是他使用了一個細粒度的訂閱模式,然后取代了拉取模式,但是他還沒有變成一個正式版,我們來看一下Eureka的github
https://github.com/Netflix/eureka/wiki它是github的wiki,這是1.0的文檔,我們使用的是1.幾,所以2.0我們就不討論了,我們來了解一下Eureka的原理,https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance大家可能看過一張圖,這是Netflix官方的一個圖,畫的稍微有點難以理解,并沒有做出一個非常詳細的解釋,然后提到了region,zone,region和zone是什么樣的關系呢,我們首先來探討region和zone的關系
region和zone其實是亞馬遜,AWS的一個概念https://bbs.csdn.net/topics/390800408
他的Region大概有九個,ZONE是里面的可用區,我們再來看這個架構圖,首先我們知道Eureka里面有一個服務注冊表,然后提供了一個API,跟他交互去添加或者刪除一條數據,Eureka Client的話,其實就是他的一個客戶端,對他進行操作,Application Client和Application Service,是這樣的,ApplicationClient就是我們之前聊到的,服務消費者,Application Service就是我們的服務提供者,make remote call其實就是我們調用Rest接口,遠程調用,us-east-1c,都屬于同一個Region,也就是美東這個Region
1c,1d他是一個編號,你可以認為他是一個ZONE,服務注冊的方式,服務提供者和服務消費者,都可以向EurekaRegistry,把自己的IP和端口,注冊到Eureka Server上面,他通過Eureka Client進行交互,寫到服務注冊表的一個東西,啟動好了之后的話,它會和Eureka有一個心跳的機制,這個心跳機制默認是30秒,30秒一次,如果3次都沒有接收到心跳,他就會從注冊表里把這個節點剔除掉,也就是90秒,我們來看一下原文https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance服務注冊到Eureka,然后向Eureka Server發送一個心跳,去續約他們的信息,然后每30秒續約一次,連續幾次不能續約的話,90秒就會把這個節點剔除掉,第三次沒有心跳的話就把它剔除掉Services register with Eureka and then send heartbeats to renew their leases every 30 seconds.If the client cannot renew the lease for a few times, it is taken out of the server registry in about 90 seconds.最后是復制,因為服務注冊表它是一個非常重要的一個東西,所有服務的節點,所有服務的IP和端口都會,存放到服務注冊表里面,它是非常重要的,所以這里面也有服務注冊表,但是服務注冊表要進行高可用了,信息進行同步,renew的話指的是,每30秒發一次心跳,續約他自己的信息,還有一個客戶端緩存,假設Eureka現在全部宕掉了,他并不影響服務消費者和服務提供者之間的調用,因為他這里有一個服務注冊表的緩存,它會知道我想要調誰,IP及端口是多少,這邊也是,所以即使所有的Eureka都掛掉了,并不影響服務的調用,所以Eureka通過心跳檢測,健康檢查,客戶端緩存,確保了系統的高可用性,靈活性和伸縮性,高可用性剛剛說過了,Eureka可以做集群,靈活性假設我們的服務提供者,掛掉了,或者我重新注冊IP發生變化,那服務注冊表里更新了,這邊的話也會查到,調的時候我還是會調用新的IP,新的端口,我依然可以找到服務提供者,可伸縮性,復制多個節點
這一塊怎么樣去寫呢,在進入實戰之前呢https://start.spring.io/下面我們進行一些調整,我們現在抽取一個Parent項目,Maven的parent項目,把項目改成項目名稱,就不叫simple了,就叫consumer,packaging是pom,加上@SpringBootApplication這個注解,第二個是@EnableEurekaServer,這樣就簡單的聲明了一個Eureka Server,一個Eureka Server本身就有一個Eureka Client,因為Eureka Server之間要進行數據的同步,服務注冊表的一個同步,這個時候他要操作別人,別人的注冊列表,那這個時候也要一個clienteureka.client.register-with-eureka=false這個只把他當做一個server,因為現在只是一個單機,單機的模擬eureka.client.service-url.defaultZone=http://localhost:8761/eureka這個你想把它注冊到哪個URL上http://127.0.0.1:8761不是http://localhost:8761/參考這個,沒有后綴eurekahttps://www.iteye.com/blog/linhexiao-2411593
<?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"><modelVersion>4.0.0</modelVersion><groupId>com.learn.cloud</groupId><artifactId>microservice-discovery-eureka</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties> <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.2.RELEASE</version></dependency></dependencies><!-- 這個插件,可以將應用打包成一個可執行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server.port=8761
eureka.instance.hostname=eureka1spring.application.name=microservice-discovery-eureka
#eureka.server.evictionIntervalTimerInMs=60000
eureka.client.serviceUrl.defaultZone=http://edmin:studyjava@eureka1:8761/eureka
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false#eureka.server.enableSelfPreservation=truesecurity.basic.enabled=true
security.user.name=edmin
security.user.password=studyjavaspring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=truelogging.level.com.learn=trace
#logging.file=D:/springboot.log
logging.file=springboot.log
#logging.path=/spring/log
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n
#spring.resources.static-locations=classpath:/hello,classpath:/learn
package com.learn.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}
?
總結
以上是生活随笔為你收集整理的Eureka简介与Eureka Server上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务发现与服务注册
- 下一篇: 将微服务注册到Eureka Server