一塊兒來學Spring Cloud | 第二章:服務註冊和發現組件 (Eureka)

本篇文章,咱們來說解springcloud的服務註冊和發現組件,上一章節咱們講解了如何搭建springcloud的多模塊項目,已經新建了springcloud-eureka-server,springcloud-eureka-client兩個模塊,本章節就在這基礎上直接使用。html

想要了解的請參考:一塊兒來學Spring Cloud | 第一章 :如何搭建一個多模塊的springcloud項目java

1、 Eureka簡介:web

1.1  什麼是eurekaspring

Eureka是一個基於REST的服務,主要用於AWS雲中的定位服務,以實現中間層服務器的負載平衡和故障轉移,在 Spring Cloud 微服務架構中一般用做註冊中心,咱們稱這個服務爲 Eureka Server,還有一個與之交互的客戶端稱之爲 Eureka Client。apache

1.2  eureka的功能瀏覽器

Eureka 、Consul 、Zookeepe,是Springcloud支持很輕鬆地實現服務的註冊和發現功能的組件。看過我上一章博客的同窗必定知道Eureka,Hystrix ,Ribbon,Zuul,都是 Netflix 公司開源的,一塊兒被稱爲 Spring Cloud Netflix,因此Eureka 是Spring Cloud 首選推薦的服務註冊與發現組件。服務器

ps : 可是Eureka 2.0 開源工做宣告中止,因此無論後期Eureka 如何發展,可是對springcloud的影響都不是很大,畢竟還有Consul 、Zookeepe能夠選擇。架構

1.3  eureka服務註冊與服務發現app

服務發現有兩種模式:一種是客戶端發現模式,一種是服務端發現模式。Eureka採用的是客戶端發現模式。Eureka Client須要每30秒給Eureka Server發一次心跳,同時更新Server上最新的註冊信息到本地,若是Server屢次沒有收到來自客戶端的心跳,那麼在90秒內會被Server上剔除。maven

2、 springcloud-eureka-server配置

咱們首先回顧一下上一章節的項目目錄結構:

修改springcloud-eureka-server模塊中的pom.xml文件以下:

<parent>標籤就是引入咱們第一章節新建的父工程的pom.xml文件,具體可參考:一塊兒來學Spring Cloud | 第一章 :如何搭建一個多模塊的springcloud項目

<?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>
	<parent>
		<groupId>com.haly</groupId>
  		<artifactId>springcloud</artifactId>
 		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.haly</groupId>
	<artifactId>springcloud-eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloud-eureka-server</name>
	<description>新建一個springcloud項目</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</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>

新增springcloud-eureka-server模塊的application.properties 配置文件

在application.properties文件中加入eureka的配置項,如今咱們使用的是.properties格式,其實工做中咱們更加喜歡用.yml格式,只是語法不同,有興趣的同窗能夠去了解yml格式配置。

# 設置的eureka端口號
server.port=8761
# 設置eureka的主機地址
eureka.instance.hostname=localhost
#表示是否將本身註冊到Eureka Server,默認爲true。因爲當前應用就是Eureka Server,故而設置爲false
eureka.client.registerWithEureka=false
#表示是否從Eureka Server獲取註冊信息,默認爲true。由於這是一個單點的Eureka Server,不須要同步其餘的Eureka Server節點的數據,故而設置爲false
eureka.client.fetchRegistry=false
#Eureka server地址,查詢服務和註冊服務都須要依賴這個地址,多個地址可用逗號(英文的)分割
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
# 服務模塊名稱
spring.application.name=springcloud-eureka-server

新增啓動類SpringcloudEurekaServerApplication

SpringcloudEurekaServerApplication類上加上@EnableEurekaServer註解,表示這個類爲Eureka Server類,雖然註解配置簡單,可是這個註解底層原理,仍是作了不少事的。

ps :若是 @EnableEurekaServer註解不可用,那多是SpringCloud版本不對,可嘗試去父pom.xml文件中修改下版本version便可

package com.haly;

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

@EnableEurekaServer
@SpringBootApplication
public class SpringcloudEurekaServerApplication {

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

}

啓動SpringcloudEurekaServerApplication服務

在SpringcloudEurekaServerApplication類上右鍵  Run as -> spring boot app,啓動項目。

啓動項目成功後,在瀏覽器中輸入 http://localhost:8761,咱們能夠看到以下頁面 

 

目前上圖紅框中,沒有eureka客戶端註冊到當前的eureka上,接下來,咱們建立一個eureka客戶端。

3、springcloud-eureka-client配置

修改springcloud-eureka-client模塊中,pom.xml文件以下:

<parent>標籤就是引入咱們第一章節新建的父工程的pom.xml文件,具體可參考:一塊兒來學Spring Cloud | 第一章 :如何搭建一個多模塊的springcloud項目

<?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>
	
	<parent>
		<groupId>com.haly</groupId>
  		<artifactId>springcloud</artifactId>
 		 <version>0.0.1-SNAPSHOT</version>
	</parent>
	
	<groupId>com.haly</groupId>
	<artifactId>springcloud-eureka-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloud-eureka-client</name>
	<description>新建一個springcloud項目</description>

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

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

</project>

修改springcloud-eureka-client模塊的application.properties 配置文件

ps: spring.application.name這個配置很重要,eureka可視化窗口上顯示的就是這個名字,之後服務與服務之間相互調用通常都是根據這個name 

# 服務端口號
server.port=9300
# 服務名稱
spring.application.name=springcloud-eureka-client
# 註冊到的eureka服務地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

新加啓動類SpringcloudEurekaClientApplication

經過註解@EnableEurekaClient 代表本身是一個eurekaclient,能夠注入到對應配置的eureka上

package com.haly;

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

@SpringBootApplication
@EnableEurekaClient
public class SpringcloudEurekaClientApplication {

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

}

在SpringcloudEurekaClientApplication類上右鍵  Run as -> spring boot app,啓動項目。

啓動項目成功後,在瀏覽器中輸入 http://localhost:8761,咱們能夠看到以下頁面 ,紅色框標記的地方,出現了Eureka Client的服務名稱(咱們在application.properties中配置的名字)

測試springcloud-eureka-client中是否能夠正常使用

新建一個業務類ClientTest,類上使用註解@RestController

@RestController註解至關於@ResponseBody + @Controller合在一塊兒的做用。

package com.haly;

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

@RestController
public class ClientTest {
   
@Value("${server.port}")
    String port;
   @RequestMapping("/hello")
    public String hello(@RequestParam(value = "name", defaultValue = "young碼農") String name) {
        return name + ",welcome to springcloud! server port:" + port;
    } }

這時打開 瀏覽器,輸入http://localhost:9300/hello?name=young碼農,頁面結果以下,證實咱們的項目搭建成功了,能夠正常寫業務邏輯了。

4、總結:

完成全部功能後,項目目錄結構以下:

喜歡我文章的同窗,能夠繼續關注我後面的文章,謝謝~~~

相關文章
相關標籤/搜索