1. 程式人生 > >Spring Cloud微服務解決方案①:Eureka服務端的構建

Spring Cloud微服務解決方案①:Eureka服務端的構建

Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,以實現SpringCloud的服務發現功能。包含兩個元件:Eureka Server和Eureka Client。

Eureka Server提供服務註冊服務,各個節點啟動後,會在Eureka Server中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀的看到。

Eureka Client是一個java客戶端,用於簡化與Eureka Server的互動,客戶端同時也就是一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。

在應用啟動後,將會向Eureka Server傳送心跳,預設週期為30秒,如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務登錄檔中把這個服務節點移除(預設90秒)。Eureka Server之間通過複製的方式完成資料的同步,Eureka還提供了客戶端快取機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用快取中的資訊消費其他服務的API。綜上,Eureka通過心跳檢查、客戶端快取等機制,確保了系統的高可用性、靈活性和可伸縮性。

以上是百度百科,原理啥的自行了解去,廢話不多數,這一篇是闡述一下Eureka Server怎麼玩。

demo下載地址:https://download.csdn.net/download/qq_22075041/10851487

本文原始碼是microservice-discovery-eureka資料夾模組

我這邊的話Eureka是建立了一個子模組的形式,在parent的pom.xml中當然不能缺少springboot和springcloud的依賴

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

然後在Eureka子模組中需要加入Eureka的依賴

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!--這個依賴不是必須的,但是如果你的專案加上basic認證的話,需要加上這個依賴,不然不生效-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

在啟動類上加上一個@EnableEurekaServer註解

package com.itmuch.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaApplication.class, args);
  }

還有配置檔案裡面

security: # 加入許可權 需要pom依賴
  basic:
    enabled: true
  user:
    name: user # 賬號
    password: password123 # 密碼
server:
  port: 8761 # 啟動埠
eureka:
  client:
    # 以下倆個註解的意思是 只把當前專案作為服務端,因為eureka本身也是一個客戶端,eureka和eureka之間會同步資訊,當前我們是單機
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:[email protected]:8761/eureka #連線地址可以多個 注意連線中的許可權引數

然後啟動起來  訪問http://localhost:8761/

 

=======================================================================================

接下來我們來聊聊eurake的高可用,程式碼案例在專案的microservice-discovery-eureka-ha模組

eurake服務本身也是個客戶端,那麼他就需要和其他的eurake保持通訊互相同步(續約時間為30秒,90秒無響應會踢掉節點,可以配置縮短這個時效,但是生產環境官方建議我們使用預設值),我們知道zookeeper必須奇數個才可以,但是eurake倆個就可以了。接下來看demo,我啟動了三個。

配置檔案這樣寫:

spring:
  application:
    name: EUREKA-HA
---
server:
  port: 8761
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ #註冊到其他倆個,也可以peer1註冊到peer2 peer2註冊到peer3 peer3註冊到peer1 ,只要不是孤立某一個就好了
---
server:
  port: 8762
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
---
server:
  port: 8763
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

記得在主機的hosts檔案裡面加一條

 127.0.0.1 peer1 peer2 peer3

我這樣寫只是為了方便,啟動的時候記得run configration指定啟動哪一個哦;