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

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

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

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

下面的pomweb

	<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文件參數;spring

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/

 

在啓動類上添加註解@EnableEurekaServerapi

// @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.架構

 

下面的pomapp

	<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文件參數;(換下配置方式)spring-boot

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

相關文章
相關標籤/搜索