Spring cloud實現服務註冊及發現

  服務註冊與發現對於微服務系統來講很是重要。有了服務發現與註冊,你就不須要成天改服務調用的配置文件了,你只須要使用服務的標識符,就能夠訪問到服務。java

  本文屬於《7天學會spring cloud系列》之四,關注服務註冊與發現,本文涉及到的項目:git

  服務註冊管理器原理以下圖所示:github

        

  全部的服務端及訪問服務的客戶端都須要鏈接到註冊管理器(eureka服務器)。服務在啓動時會自動註冊本身到eureka服務器,每個服務都有一個名字,這個名字會被註冊到eureka服務器。使用服務的一方只須要使用該名字加上方法名就能夠調用到服務。spring

  Spring cloud的服務註冊及發現,不單單隻有eureka,還支持Zookeeper和Consul。默認狀況下是eureka,spring 封裝了eureka,使其很是簡單易用,只須要比傳統應用增長一行代碼就能夠使用了,這一行代碼就是一個註解。咱們按如下步驟實現服務註冊和發現功能。數據庫

  1)首選須要創建eureka服務器服務器

  建立spring cloud eureka服務器和建立以前那個配置文件服務器相似,你只須要建立一個空的maven工程,並引入spring boot的相關starter便可,而後建立一個近乎空的執行類,工程以下圖:mybatis

 

  在EurekaServer類中咱們加入以下代碼:app

  @SpringBootApplicationmaven

  @EnableEurekaServer微服務

  public class EurekaServer {

    public static void main(String[] args) {

    SpringApplication.run(EurekaServer.class, args);

      }

  }

  能夠看到只須要使用@EnableEurekaServer註解就可讓應用變爲Eureka服務器,這是由於spring boot封裝了Eureka Server,讓你能夠嵌入到應用中直接使用。至於真正的EurekaServer是Netflix公司的開源項目,也是能夠單獨下載使用的。

  在application.properties配置文件中使用以下配置:

  server.port=8761

  eureka.instance.hostname=localhost

  eureka.client.registerWithEureka=false

  eureka.client.fetchRegistry=false

  eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

  其中server.port配置eureka服務器端口號。Eureka的配置屬性都在開源項目spring-cloud-netflix-master中定義(spring boot連文檔都沒有,只能看源碼了),在這個項目中有兩個類EurekaInstanceConfigBeanEurekaClientConfigBean,分別含有eureka.instance和eureka.client相關屬性的解釋和定義。從中能夠看到,registerWithEureka表示是否註冊自身到eureka服務器,由於當前這個應用就是eureka服務器,不必註冊自身,因此這裏是false。fetchRegistry表示是否從eureka服務器獲取註冊信息,同上,這裏不須要。defaultZone就比較重要了,是設置eureka服務器所在的地址,查詢服務和註冊服務都須要依賴這個地址。

  作完這些後固然,還要改一下pom文件,增長eureka-server的starter便可:

  <dependency>

                            <groupId>org.springframework.cloud</groupId>

                            <artifactId>spring-cloud-starter-eureka-server</artifactId>

  </dependency>

  如此eureka服務器就完成了,在命令行啓動就能夠了。

  2)讓服務使用eureka服務器

  讓服務使用eureka服務器,只需添加@EnableDiscoveryClient註解就能夠了。回到咱們在上篇文章中實現的cloud-simple-service微服務應用。在main方法所在的Application類中,添加@EnableDiscoveryClient註解。而後在配置文件中添加:

  eureka.client.serviceUrl.defaultZone=http\://localhost\:8761/eureka/

  spring.application.name=cloud-simple-service

  其中defaultZone是指定eureka服務器的地址,不管是註冊仍是發現服務都須要這個地址。application.name是指定進行服務註冊時該服務的名稱。這個名稱就是後面調用服務時的服務標識符(這是服務發現的功能,咱們在後面章節具體介紹)。固然,pom文件也須要增長:

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka</artifactId>

  </dependency>

  如此以來該服務啓動後會自動註冊到eureka服務器。若是在該服務中還須要調用別的服務,那麼直接使用那個服務的服務名稱加方法名構成的url便可,具體咱們將在下章結合ui端的應用具體介紹。

相關文章
相關標籤/搜索