SpringCloud服務註冊和發現組件Eureka
本篇文章,我們來講解springcloud的服務註冊和發現組件,上一章節我們講解瞭如何搭建springcloud的多模塊項目,已經新建瞭springcloud-eureka-server,springcloud-eureka-client兩個模塊,本章節就在這基礎上直接使用。
想要瞭解的請參考:一起來學Spring Cloud | 第一章 :如何搭建一個多模塊的springcloud項目
一、Eureka簡介:
1.1 什麼是eureka
Eureka是一個基於REST的服務,主要用於AWS雲中的定位服務,以實現中間層服務器的負載平衡和故障轉移,在 Spring Cloud 微服務架構中通常用作註冊中心,我們稱這個服務為 Eureka Server,還有一個與之交互的客戶端稱之為 Eureka Client。
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服務註冊與服務發現
服務發現有兩種模式:一種是客戶端發現模式,一種是服務端發現模式。Eureka采用的是客戶端發現模式。Eureka Client需要每30秒給Eureka Server發一次心跳,同時更新Server上最新的註冊信息到本地,如果Server多次沒有收到來自客戶端的心跳,那麼在90秒內會被Server上剔除。
二、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客戶端。
三、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 { <br> @Value("${server.port}")<br> String port;<br> @RequestMapping("/hello")<br> public String hello(@RequestParam(value = "name", defaultValue = "young碼農") String name) {<br> return name + ",welcome to springcloud! server port:" + port;<br> } }
這時打開 瀏覽器,輸入http://localhost:9300/hello?name=young碼農,頁面結果如下,證明我們的項目搭建成功瞭,可以正常寫業務邏輯瞭。
四、總結:
完成所有功能後,項目目錄結構如下:
到此這篇關於SpringCloud服務註冊和發現組件Eureka的文章就介紹到這瞭,更多相關SpringCloud服務註冊和 組件Eureka內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringCloud Eureka服務治理之服務註冊服務發現
- SpringCloud如何搭建一個多模塊項目
- SpringCloud eureka(server)微服務集群搭建過程
- SpringCloud實現Eureka服務註冊與發現
- SpringCloud Eureka的使用教程