SpringCloud 3 Service Provider

上一章已經建好了Eureka Server

 

這是還沒有應用來註冊這時我們新建一個服務提供者 cloud-hello

 

新建過程不再重複,和創建eureka server的過程一樣。

 

在啓動類上加@EnableEurekaClient 註解。服務即會想註冊中心註冊。

 

@EnableEurekaClient
@SpringBootApplication
public class CloudHelloApplication {

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

}

 

添加一個restfull接口類

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String helloCloud(){
        return "hello cloud";
    }
}

 

添加配置文件 application.yml

server:
  port: 8889

spring:
  application:
    name: hello-service

eureka:
  client:
    healthcheck:
      enabled: true
    service-url:
      defaultZone: http://localhost:8888/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
    metadata-map:
      zone: ABC      # eureka可以理解的元數據
      lilizhou: BBC  # 不會影響客戶端行爲
    lease-renewal-interval-in-seconds: 5

eureka.client.healthcheck.enabled = true 開啓Eureka客戶端的健康檢查
eureka.client.service-url.defaultZone 指定客戶端對應的註冊中心服務器的地址
eureka.instance.prefer-ip-address = true 表示註冊到註冊中心的是IP    
eureka.instance.instance-id 表示註冊到註冊中心實例的ID規則

eureka.instance.lease-renewal-interval-in-seconds 表示續約更新時間間隔,也就是客戶端健康檢查的心跳時間間隔。

注意 ${spring.cloud.client.ip-address} 需添加 

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
        </dependency>

可以放到父項目

 

遇到的坑及解決:服務並沒有像註冊中心註冊

 

去官網看資料 https://spring.io/projects/spring-cloud-netflix#overview

 

客戶端只說了使用註解,並沒講用什麼依賴,查的別人的博客都是spring-cloud-starter-netflix-eureka-client

然後服務端是用  @EnableEurekaServer 和依賴 spring-cloud-starter-netflix-eureka-server

 

最後實驗發現客戶端並不需要 spring-cloud-starter-netflix-eureka-client 依賴,

同樣使用spring-cloud-starter-netflix-eureka-server 依賴配合 @EnableEurekaClient註解即可實現客戶端。

改好依賴後重啓cloud-hello,服務已在註冊中心註冊了。

 

 

這樣看來spring-cloud-starter-netflix-eureka-server 這個依賴是所有服務都需要的,可以抽到父項目中。

 

本地開發小技巧:由於eureka自我保護機制的工作機制是如果在15分鐘內超過85%的客戶端節點都沒有正常的心跳,那麼Eureka就認爲客戶端與註冊中心出現了網絡故障,Eureka Server自動進入自我保護機制。但是由於在本地開發很容易15分鐘內超過85%的客戶端節點心跳正常,如果還保活會造成服務已經關閉了,結果註冊中心狀態還是可用的假象。

這是需要在服務端關閉保活

服務端

eureka:

  server:

    # 測試時關閉自我保護機制,保證不可用服務及時踢出

    enable-self-preservation: false

 

客戶端:

# 心跳檢測檢測與續約時間

# 測試時將值設置設置小些,保證服務關閉後註冊中心能及時踢出服務

eureka:

  instance:

    lease-renewal-interval-in-seconds: 1

    lease-expiration-duration-in-seconds: 2

    #lease-renewal-interval-in-seconds 每間隔1s,向服務端發送一次心跳,證明自己依然”存活“

    #lease-expiration-duration-in-seconds  告訴服務端,如果我2s之內沒有給你發心跳,就代表我“死”了,將我踢出掉。

這樣的或服務註冊中心的服務就是實時得了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章