SpringCloud使用Eureka作為服務治理中心
前言
我們在進行開發分布式架構的系統時,有一個不可或缺的工具那就是服務治理組件,我們可以通過它來實作服務的注冊、發布和呼叫,可以理解為它維護著我們所有服務的花名冊,目前主流的服務治理中心有Zookeeper、Eureka、Nacos等,本篇博客這里我想和大家介紹一下服務治理組件—Eureka的原理和使用,
Nacos的使用可以參考我的博客:Nacos服務治理中心和配置中心
正文
Eureka
Eureka是一項基于REST的服務,主要在AWS云中用于定位服務,以實作負載均衡和中間層服務器的故障轉移,它是微服務框架中最核心和最基礎的模塊,它主要用來實作微服務實體的自動化注冊與發現,
Eureka由2個部分組成:服務端發現組件 和 客戶端發現組件:
- 客戶端通過注解的方式嵌入程式中,服務器和客戶端之間會進行周期性心跳檢測 ,如果心跳不存在時,該服務節點會從服務注冊表中移除,并且我們要知道
Eureka的心跳檢測是基于SpringBoot Actuator來實作的 - 各個服務節點 通過注冊中心得注冊資訊以
Rest方式來實作呼叫,

Eureka的三種角色:服務注冊中心、服務提供者、服務消費者,事實上一個結點既可以是服務提供者 、也可以是服務消費者,

SpringCloud使用Eureka作為服務治理中心
Eureka Server 的搭建
Maven依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<dependencies>
<!--除去springboot自帶的日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j -->
<!--添加log4j2的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--spring boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<!--加入Spring Cloud 的Dalston版本的配置依賴-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.properties:組態檔
server.port=8761
###eureka配置
eureka.instance.hostname=localhost
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=80
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.server.enable-self-preservation=false
各配置項說明:
eureka.instance.hostname:應用實體主機名,一般結合linux的hostname中配置映射關系,eureka.client.registry-fetch-interval-seconds:表示eureka client間隔多久去拉取服務注冊資訊,默認為30秒,對于api-gateway,如果要迅速獲取服務注冊狀態,可以縮小該值,比如5秒eureka.instance.lease-expiration-duration-in-seconds:表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance,eureka.client.register-with-eureka:禁止自己當做服務注冊,當單節點eureka server時選擇false,eureka.client.fetch-registry:表示是否從eureka server獲取注冊的服務資訊,當單節點eureka server時選擇false,eureka.client.service-url.defaultZone:eureka服務器的地址,如果服務注冊中心為高可用集群時,多個注冊中心地址以逗號分隔,eureka.server.enable-self-preservation,是否允許開啟自我保護模式,預設:true,當eureka服務器在短時間內丟失過多客戶端時,自我保護模式可使服務端不再洗掉失去連接的客戶端,在開發除錯程序中選擇false,避免客戶端節點重新啟動后無法被重繪,
更多引數可參考:https://www.cnblogs.com/zyon/p/11023750.html
SpringCloudGovernanceApp:啟動類
@Slf4j
@EnableEurekaServer //這個注解實作服務器端
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringCloudGovernanceApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCloudGovernanceApp.class);
}
/**
* 專案的啟動方法
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringCloudGovernanceApp.class, args);
log.info("======服務已經啟動========");
}
}
驗證
啟動專案后:訪問Eureka的控制臺 http://127.0.0.1:8761/

Eureka Client的搭建
Maven依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<dependencies>
<!--除去springboot自帶的日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j -->
<!--添加log4j2的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--spring boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<!--加入Spring Cloud 的Dalston版本的配置依賴-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.properties:組態檔
server.port=8080
spring.application.name=springcloud-demo-producer
#eureka
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
eureka.client.availability-zones.localhost=http://localhost:8761/eureka/,http://localhost:8762/eureka/
eureka.client.registry-fetch-interval-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=80
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.prefer-ip-address=true
各配置項說明:
eureka.client.service-url.defaultZone:eureka服務器的地址,如果服務注冊中心為高可用集群時,多個注冊中心地址以逗號分隔,eureka.client.availability-zones.localhost:在多機房的時候啟動,比如服務A呼叫服務B,可以實作A服務優先訪問同機房的服務B,避免跨機房影響訪問時間,eureka.client.registry-fetch-interval-seconds:表示eureka client間隔多久去拉取服務注冊資訊,默認為30秒,對于api-gateway,如果要迅速獲取服務注冊狀態,可以縮小該值,比如5秒,eureka.instance.lease-expiration-duration-in-seconds:表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance,eureka.instance.lease-renewal-interval-in-seconds:表示eureka client發送心跳給server端的頻率,eureka.instance.prefer-ip-address:就可以將IP注冊到eureka server上,而如果不配置就是機器的主機名,這樣可以實作通過公網實作服務呼叫,
更多引數可參考:https://www.cnblogs.com/zyon/p/11023750.html
SpringCloudProducerApp:啟動類
@Slf4j
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class},scanBasePackages = "com.luo")
@EnableDiscoveryClient
@EnableEurekaClient
@EnableCircuitBreaker
public class SpringCloudProducerApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCloudProducerApp.class);
}
/**
* 專案的啟動方法
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringCloudProducerApp.class, args);
log.info("======服務已經啟動========");
}
}
驗證
啟動專案后:重繪Eureka的控制臺 http://127.0.0.1:8761/


CSDN認證博客專家
Java
Redis
架構
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/152664.html
標籤:其他
上一篇:Linux pyhton錯誤
