(一)Eureka 服務的注冊與發現


(一)服務的注冊於發現(eureka);

Eureka Server: 服務注冊中心,負責服務列表的注冊、維護和查詢等功能

在Idea里,新建項目,選擇Spring initializer.

下面的pom

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

 

配置properties文件參數;

server.port=8882

#域名
eureka.instance.hostname=localhost

#禁用 Eureka的客戶端注冊行為
eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

#eureka注冊中心服務地址
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

 

在啟動類上添加注解@EnableEurekaServer

// @EnableEurekaServer 代表啟動注冊服務中心
@EnableEurekaServer
@SpringBootApplication
public class SpringCloundEurekaDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloundEurekaDemoApplication.class, args);
	}
}

  

啟動項目,打開連接  http://localhost:8882

 

 二.創建一個服務提供者(Eureka-client)

服務提供方,同時也是一個Eureka Client,負責將所提供的服務向Eureka Server進行注冊、續約和注銷等操作。注冊時所提供的主要數據包括服務名、機器ip、端口號、域名等,從而能夠使服務消費方能夠找到

Eureka服務器我們已經編寫好了,接下來我們就可以編寫一個Eureka的客戶端了。這個客戶端可能是一個服務提供者,也可能是一個服務消費者,甚至兩者都是。

我們先編寫一個簡單的Eureka Client

 

在Idea里,新建項目,選擇Spring initializ.

 

下面的pom

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			<version>1.4.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

 

配置yml文件參數;(換下配置方式)

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8882/eureka/
server:
  port: 8883
spring:
  application:
    name: service-hello

  

 

在啟動類上添加注解@EnableEurekaClient

// @ EnableEurekaClient   表示申明自己是一個發服務提供者;
@EnableEurekaClient
@SpringBootApplication
public class SpringCloundEurekaClientExampleApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringCloundEurekaClientExampleApplication.class, args);
   }
}

  

  

創建conroller

@RestController
public class HelloController {
    @Value("${server.port}")
    String port;

    @Value("${spring.application.name}")
    String name;

    @RequestMapping("/index")
    public String index() {
        return "服務提供者client:" + name + "服務端口:" + port;
    }
}

  

  

 

啟動項目

然后我們再來看一下服務注冊中心;就會看到,已經注冊了一個服務提供者;

 

為了接下來測試Ribbon負載

我們將client的配置文件屬性注冊的端口改為8884;;然后在IDEA把該服務再啟動一個實例

(把single instance only勾選去掉)

 

回到服務中心,已經有兩個client了

 

此外

Spring Cloud實現心跳監測,在服務注冊和停止時,注冊中心能得到通知,並更新服務實例列表 

(一)Spring Cloud注冊中心添加配置: 

eureka.server.enable-self-preservation=false 

eureka.server.enable-self-preservation

默認情況下,如果Eureka Server在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會注銷該實例(默認90秒)。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務本身其實是健康的,此時本不應該注銷這個微服務。

Eureka通過“自我保護模式”來解決這個問題——當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網絡分區故障),那么這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務注冊表中的信息,不再刪除服務注冊表中的數據(也就是不會注銷任何微服務)。當網絡故障恢復后,該Eureka Server節點會自動退出自我保護模式。

綜上,自我保護模式是一種應對網絡異常的安全保護措施。它的架構哲學是寧可同時保留所有微服務(健康的微服務和不健康的微服務都會保留),也不盲目注銷任何健康的微服務。使用自我保護模式,可以讓Eureka集群更加的健壯、穩定。

eureka.server.eviction-interval-timer-in-ms

eureka server清理無效節點的時間間隔,默認60000毫秒,即60秒

 


(二)Spring Cloud服務提供者添加配置: 

eureka.instance.lease-renewal-interval-in-seconds=5 
eureka.instance.lease-expiration-duration-in-seconds=5

eureka.client.registry-fetch-interval-seconds

表示eureka client間隔多久去拉取服務注冊信息,默認為30秒,對於api-gateway,如果要迅速獲取服務注冊狀態,可以縮小該值,比如5秒

eureka.instance.lease-expiration-duration-in-seconds

leaseExpirationDurationInSeconds,表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance。

  • 默認為90秒
  • 如果該值太大,則很可能將流量轉發過去的時候,該instance已經不存活了。
  • 如果該值設置太小了,則instance則很可能因為臨時的網絡抖動而被摘除掉。
  • 該值至少應該大於leaseRenewalIntervalInSeconds

eureka.instance.lease-renewal-interval-in-seconds

leaseRenewalIntervalInSeconds,表示eureka client發送心跳給server端的頻率。如果在leaseExpirationDurationInSeconds后,server端沒有收到client的心跳,則將摘除該instance。除此之外,如果該instance實現了HealthCheckCallback,並決定讓自己unavailable的話,則該instance也不會接收到流量。

  • 默認30秒

 

 

 

所屬文章參考:https://www.jianshu.com/u/8f959a9cbc66。https://blog.csdn.net/qq_41377914/article/category/7719803


免責聲明!

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



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