SpringCloud - Eureka服務管理

Eureka Serverjava

啓動多個服務集羣,集羣之間相互註冊
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
spring:
  application:
    name: microservice-discovery-eureka-ha
 
---
spring:
  profiles: peer1                                 # 指定profile=peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1                               # 指定當profile=peer1時,主機名是peer1
  client:
    serviceUrl:
      defaultZone: http://localhost:8762/eureka/      # 將本身註冊到peer2這個Eureka上面去
#  server:
#    enable-self-preservation: false
 
---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
#  server:
#    enable-self-preservation: false
 
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

 

Eureka Clientspring

將服務提供者註冊到服務集羣
@EnableDiscoveryClient
@SpringBootApplication
public class ProviderUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderUserApplication.class, args);
    }
}
server:
  port: 8000
spring:
  application:
    name: microservice-provider-user
  jpa:
    generate-ddl: false
    show-sql: true
    hibernate:
      ddl-auto: none
  datasource:                           # 指定數據源
    platform: h2                        # 指定數據源類型
    schema: classpath:schema.sql        # 指定h2數據庫的建表腳本
    data: classpath:data.sql            # 指定h2數據庫的數據腳本
logging:                                # 配置日誌級別,讓hibernate打印出執行的SQL
  level:
    root: INFO
    org.hibernate: INFO
    org.hibernate.type.descriptor.sql.BasicBinder: TRACE
    org.hibernate.type.descriptor.sql.BasicExtractor: TRACE
eureka:
  client:
    serviceUrl:
  instance:
    prefer-ip-address: true //註冊IP到Server,默認爲host name
    lease-renewal-interval-in-seconds: 1
    lease-expiration-duration-in-seconds: 2

 

小結sql

  • 新版本開啓Actuator功能須要配置:management.security.enable=false
  • Eureka包含兩個組件,Eureka server和Eureka client,他們的做用是:
        (1)Server提供服務發現的功能,微服務再啓動後,會向Server註冊本身的信息,包括ip,port,微服務名稱,Server會存儲這些信息;
        (2)Client是Java客戶端,啓動後會週期性(默認30s)向Server發送心跳以續約本身的「租期」;
        (3)Server在必定時間內沒有接收到某個服務實例的心跳,Server會註銷該實例(默認90s);
        (4)默認狀況下,Server也是Client,多個Server實例,互相之間經過複製的方式,來實現服務註冊表中的數據同步;
        (5)Client會緩存服務註冊表中的信息,從而無需每次請求都查詢Server,從而下降了Server的壓力,其次即便Server全部的節點都已經宕機,服務消費者依然能夠是使用緩存中的信息找到服務提供者並完成調用。
  • 若是Server爲單個,能夠使用eureka.client.registerWithRegister=false和eureka.client.fetchRegistry=false,即不註冊信息到Eureka同時也不獲取註冊表的信息。
  • Server能夠經過Security添加帳戶密碼,Client端訪問的格式爲http://name:password@url,Server的application.xml配置以下:
security.basic.enabled=true //開啓基於HTTP basic的認證
security.user.name=xxx
security.user.password=xxx
  •  自我保護模式:Server在一段時間內沒有接受到某個服務實例的心跳,Server會註銷該實例,可是這樣會比較危險,Server使用自我保護的模式進行處理,一旦進入該模式,Sever就會保護服務註冊表的信息,再也不刪除服務註冊表的數據(也就是不註銷任何微服務),當故障恢復後,Server節點會自動退出自我保護模式。
  • Server集羣后,爲了不極端的狀況,在Client端配置多個eureka.client.serviceUrl.defaultZone
相關文章
相關標籤/搜索