1. 程式人生 > >【SpringCloud Greenwich版本】第二章:服務提供者(eureka)

【SpringCloud Greenwich版本】第二章:服務提供者(eureka)

一、SpringCloud版本

本文介紹的Springboot版本為2.1.1.RELEASE,SpringCloud版本為Greenwich.RC1,JDK版本為1.8,整合環境為IntelliJ IDEA

二、Eureka客戶端介紹

服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。Netflix服務發現伺服器和客戶端是Eureka。可以將伺服器配置和部署為高可用性,每個伺服器將註冊服務的狀態複製到其他伺服器。

當客戶端註冊Eureka時,它提供關於自身的元資料,例如主機和埠,健康指示符URL,主頁等。Eureka從屬於服務的每個例項接收心跳訊息。如果心跳失敗超過可配置的時間表,則通常將該例項從登錄檔中刪除。

三、建立客戶端(服務提供者)

  • 3.1建立

參考前一章,建立Springboot module工程,取名為cloudclient,pom檔案繼承cloudser的pom檔案

<?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.jthao</groupId> <artifactId>cloudclient</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloudclient</name> <description>Demo project for Spring Boot</description>
<parent> <groupId>com.jthao</groupId> <artifactId>cloudser</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
  • 3.2啟動

啟動Eureka客戶端需在啟動類上增加@EnableDiscoveryClient註解

package com.jthao.cloudclient;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class CloudclientApplication {

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

}

當然,僅僅是@EnableDiscoveryClient是不夠的,還需在配置檔案中註明訪問的服務端地址service-url
注:

  • 其中spring.application.name為各服務之間訪問呼叫時使用。
  • eureka.client.healthcheck.enabled=true為開啟健康檢查

預設情況下,Eureka使用客戶端心跳來確定客戶端是否啟動。除非另有規定,否則發現客戶端將不會根據Spring Boot執行器傳播應用程式的當前執行狀況檢查狀態。這意味著成功註冊後Eureka將永遠宣佈申請處於“UP”狀態。通過啟用Eureka執行狀況檢查可以改變此行為,從而將應用程式狀態傳播到Eureka。因此,每個其他應用程式將不會在“UP”之外的狀態下將流量傳送到應用程式

server.port=8002
spring.application.name=cloudclient
eureka.client.service-url.defaultZone: http://localhost:8001/eureka/

eureka.client.healthcheck.enabled=true

我們在配置一個Controller

package com.jthao.cloudclient.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping("/test")
    public String hello(@RequestParam String name) {
        System.out.println("cloudclient start");
        return name + "===埠:8002被呼叫了===";
    }

}

啟動完成後,會發現客戶端已經在服務註冊中心註冊了。服務名為cloudclient,埠為8002
在這裡插入圖片描述通過瀏覽器訪問http://localhost:8002/test?name=xiaoming
在這裡插入圖片描述
至此,服務註冊中心(eureka server)與服務提供者(eureka client)已全部完成。

四、啟動多個客戶端

在此介紹下如何啟動多個客戶端,為後續初步實現負載做準備。
選中專案,如下圖所示,點選編輯配置
在這裡插入圖片描述將紅框中預設勾選去掉
在這裡插入圖片描述修改配置檔案中埠為8003,Controller中的輸出資訊稍加修改,再次啟動cloudclient工程,原來的工程不用停

server.port=8003
spring.application.name=cloudclient
eureka.client.service-url.defaultZone: http://localhost:8001/eureka/
package com.jthao.cloudclient.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping("/test")
    public String hello(@RequestParam String name) {
        System.out.println("cloudclient start");
        return name + "===埠:8003被呼叫了===";
    }

}

會發現註冊中心多了一個服務,埠為8003
在這裡插入圖片描述訪問頁面,輸出資訊
在這裡插入圖片描述