1. 程式人生 > >Spring Cloud Eureka服務註冊中心 單節點搭建(學習總結)

Spring Cloud Eureka服務註冊中心 單節點搭建(學習總結)

一、前言:

本文主要搭建Spring Cloud Eureka服務註冊中心(單節點),不過一般生產環境都是多節點負載均衡,形成一個服務註冊中心叢集,這樣一個註冊中心崩了不會影響整個系統的執行以及介面的呼叫。本文基於SpringBoot 1.5.2,Spring Cloud Camden.SR6版本編寫,版本不一致可能會有差異。下面就學習總結記錄一下:

二、新建一個Eureka-Server:

首先引入依賴pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.springcloud.wsh</groupId>
	<artifactId>springcloud_eureka_server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springcloud_eureka_server</name>
	<description>Spring Cloud Eureka服務提供者</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Camden.SR6</spring-cloud.version>
	</properties>

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

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

三、啟動類加上@EnableEurekaServer註解,開啟Eureka服務發現的功能。

@SpringBootApplication
//@EnableEurekaServer註解的作用: 開啟Eureka服務發現的功能
@EnableEurekaServer
public class SpringcloudEurekaServerApplication {

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

四、編寫application.yml檔案:主要配置一些埠號、應用名稱、以及服務註冊中心地址等等。

server:
  port: 1111  #服務埠號
eureka:
  client:
    fetch-registry: false  #是否檢索服務
    register-with-eureka: false  #表示不向Eureka註冊自身服務
    service-url: #服務註冊中心地址,其他服務可以通過指定eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/註冊到Eureka上
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  instance:
    #主機名
    hostname: localhost
spring:
  application:
    #服務名稱
    name: eureka-server

到此,Eureka服務發現者已經搭建好。

五、搭建Eureka Client服務提供者

首先引入依賴pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.springcloud.wsh</groupId>
	<artifactId>springcloud_eureka_client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springcloud_eureka_client</name>
	<description>Spring Cloud Eureka服務提供者</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Camden.SR6</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>

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

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

六、啟動類加上@EnableDiscoveryClient註解,使其成為Eureka的一個服務提供者。

@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient //註冊Eureka客戶端
public class SpringcloudEurekaClientApplication {

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

七、編寫application.yml配置檔案:

主要是要指定服務註冊中心的地址,埠號等等

server:
  port: 2222 #服務埠號
spring:
  application:
    #服務名稱,對應註冊到Eureka的例項名稱,後續Zuul路由對映的serviceId也是根據這個
    name:  eureka-client
eureka:
  instance:
    #主機名
    hostname: localhost
  client:
    serviceUrl:
      #服務註冊中心的地址,指定這個會向Eureka註冊一個名叫eureka-client的客戶端
      #單節點Eureka服務註冊中心,不適用與生產環境,實際生產會用到Eureka Server叢集
      defaultZone: http://localhost:1111/eureka/

#這裡可以定義一些自定義的引數,可以使用@Value("${com.springcloud.author}")獲取自定義引數的值
com:
  springcloud:
    author: weixiaohuai
    date: 2018-09-07 10:10

八、新建測試Controller:TestController.java:

注意:可以引入discoveryClient獲取當前服務例項的一些資訊。可以使用@Value註解獲取在配置檔案自定義的一些引數。

//@RestController註解是一個組合註解, @RestController = @Controller  + @ResponseBody
@RestController
public class TestController {

    private static Logger logger = LoggerFactory.getLogger(TestController.class);

    @Autowired
    private DiscoveryClient discoveryClient;

    //獲取配置檔案中的自定義引數
    @Value("${com.springcloud.author}")
    private String author;
    @Value("${com.springcloud.date}")
    private String date;

    @GetMapping("/test")
    public String test() {
        //獲取當前服務的例項
        ServiceInstance serviceInstance = discoveryClient.getLocalServiceInstance();
        String info = "hello eureka, 主機名:" + serviceInstance.getHost() + ", service_id:" + serviceInstance.getServiceId() + " 作者: " + author + " / 日期: " + date;
        logger.info(info);
        return info;
    }

}

九、啟動專案:

瀏覽器訪問http://localhost:1111/,如下圖。可以看到eureka-client已經成功註冊到Eureka上面。

十、擴充套件

Eureka內部維護服務節點的機制:

【a】服務下線

迭代更新終止訪問某一個或者多個服務節點時,在正常關閉服務節點的情況下,Eureka Client會告訴Eureka Server我要下線了,Eureka Server收到請求後會將該服務例項執行狀態UP修改為DOWN

【b】失效剔除

Eureka Server在啟動完成後會建立一個定時器每隔60秒檢查一次服務健康狀況,如果其中一個服務節點超過90秒未檢查到心跳,那麼Eureka Server會自動從服務例項列表內將該服務剔除。(記憶體溢位殺死程序伺服器宕機非正常流程關閉服務節點)

【c】自我保護

Eureka Server自我保護機制會檢查最近15分鐘內所有Eureka Client正常心跳的佔比,如果低於85%就會被觸發保護機制,當觸發自我保護機制Eureka Server就會鎖定服務列表,不讓服務列表內的服務過期,不過這樣我們在訪問服務時,得到的服務很有可能是已經失效的例項,如果是這樣我們就會無法訪問到期望的資源,會導致服務呼叫失敗,所以這時我們就需要有對應的容錯機制熔斷機制

關閉自我保護: 在application.properties配置檔案中加入程式碼:

eureka.server.enable-self-preservation=false

到此,我們單節點的Eureka服務註冊中心已經搭建完成,本文是筆者在學習SpringCloud的時候的一些總結,僅供參考,大家一起學習,共同進步!

相關推薦

Spring Cloud Eureka服務註冊中心 節點搭建(學習總結)

一、前言: 本文主要搭建Spring Cloud Eureka服務註冊中心(單節點),不過一般生產環境都是多節點負載均衡,形成一個服務註冊中心叢集,這樣一個註冊中心崩了不會影響整個系統的執行以及介面的呼叫。本文基於SpringBoot 1.5.2,Spring Cloud 

搭建Spring Cloud Eureka服務註冊中心(二)服務呼叫

上一節我們搭建了單節點的Eureka和一個provide-server的服務,這一次我們再新建立一個consume-server,然後使用RestTemplate實現服務之間的呼叫。 1、建立consume-server服務 服務建立過程就不一一描述了,這裡貼一下appl

Spring Cloud Eureka-服務註冊與發現

效應 code ack size init -- 編輯 rep pid Spring Cloud Eureka Spring Cloud是目前用於開發微服務的主流框架之一,我們都知道在微服務架構中最為基礎、核心的模塊,就是服務註冊與發現。 在Spring Cloud裏我們可

解決spring cloud eureka服務註冊出現的Error creating bean with name 'org.springframework.cloud.netflix...問題

異常如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.netflix.eureka.EurekaClien

spring-cloud-eureka-server 註冊中心啟動不顯示頁面而是xml問題

啟動eureka-server時,怎麼也訪問不了頁面: 而是: 各種找問題終於找到了原因: 將專案中依賴的freemarker-2.3.25-incubating.jar版本從本地maven倉庫中刪除,再maven update 專案。 終於··

01.Spring Cloud Eureka服務註冊與發現

Spring Cloud Eureka Spring Cloud Eureka 1.構建服務註冊中心 2.提供服務,註冊服務 依賴 啟動類 獲取服務 3.配置註冊中心高可用

第二篇:Spring Cloud Eureka 服務註冊+發現

Spring Cloud Netflix 主要元件 Spring Cloud Netflix 的核心是用於服務註冊與發現的 Eureka,接下來我們將以 Eureka 為線索,介紹 Eureka、Ribbon、Hystrix、Feign 這些 Spring Cloud Netflix 主要元件。 服務註冊

Spring Cloud Eureka 服務註冊與發現

Eureka是Netflix開源的一個RESTful服務,主要用於服務的註冊發現。Eureka由兩個元件組成:Eureka伺服器和Eureka客戶端。Eureka伺服器用作服務註冊伺服器。Eure

解決spring cloud eureka服務註冊出現的Error creating bean with name 'org.springframework.cloud.netflix...問題

異常如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.netflix.eureka.Eu

Spring cloud Eureka服務註冊及發現(三)發現使用服務

Feign是一個宣告式的Web Service客戶端,它使得編寫Web Serivce客戶端變得更加簡單。我們只需要使用Feign來建立一個介面並用註解來配置它既可完成。具體Feign的解釋請看:Spring Cloud Feign詮釋 下面,通過一個例子

如何優化Spring Cloud服務註冊中心架構?

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

沒使用Spring Cloud的版本管理導致Eureka服務無法註冊Eureka服務註冊中心

esc ice 修改 encoding -s put http nag scrip 創建了一個Eureka Server的服務註冊集群(兩個Eureka服務),都能相互註冊,寫了一個Eureka客戶端服務無法註冊到服務發現註冊中心 註冊中心1: 註冊中心2:

Spring CloudEureka服務註冊中心搭建

1:首先在idea上面建立一個Maven工程,命名為Sprng-Boot-eureka-test 建立的Maven工程中的pom檔案如下 2:在建立的Sprng-Boot-eureka-test工程下面新建一個module為eureka-server

基於spring-cloud-eureka 服務中心註冊

本文基於Finchley.SR2以上,Edgware.SR5的配置部分不適用 spring-boot版本為2.0.2RELEASE, 用部分設定1.5已不適用 伺服器端設定 伺服器pom檔案設定 加入依賴 spring-cloud-starter-netflix-eureka

十五:Spring CloudEureka服務註冊中心(HA版)

1. Eureka簡介 2. 程式碼實現 2.1涉及的模組 eureka-server-ha:通過profiles指定不同的埠來模擬多服務例項。 eureka-service:服務提供者 2.2

Spring Cloud Eureka(四):Eureka 服務註冊中心配置說明

Eureka Client 配置項(eureka.client.*) org.springframework.cloud.netflix.eureka.EurekaClientConfigBean

初始化Spring Cloud建立Eureka服務註冊中心

bootstrap https 控制臺 depend lee 心跳 git reg iyu 1、新建項目 https://gitee.com/frankawp/vishnu 新建一個git項目 打開git bash git clone https://gitee.co

SpringCloud實戰二:Spring Cloud Eureka 服務發現與註冊中心

  Spring Cloud Eureka 它是通過封裝 Netflix 開源的Eureka,一款基於 Rest 的服務發現與註冊元件,包括 Eureka Server 和 Eureka Client,最新版本為2018年8月釋出的1.9.4版本,最新的2.x版本已經不再開源,但是1.9

Spring Cloud Eureka 服務關閉但是未從註冊中心刪除 自我保護機制,以及如何關閉自我保護機制的辦法

自我保護背景 首先對Eureka註冊中心需要了解的是Eureka各個節點都是平等的,沒有ZK中角色的概念, 即使N-1個節點掛掉也不會影響其他節點的正常執行。 預設情況下,如果Eureka Server在一定時間內(預設90秒)沒有接收到某個微服務例項的心跳,Eure

Spring Cloud Eureka 服務關閉但是未從註冊中心刪除 自我保護機制

背景:由於Eureka擁有自我保護機制,當其登錄檔裡服務因為網路或其他原因出現故障而關停時,Eureka不會剔除服務註冊,而是等待其修復。這是AP的一種實現。  為了讓其有精準的 CP健康檢查,可以採取讓其剔除不健康節點。 server端: eureka.server.