微服務註冊與發現及如何使用Eureka

會飛的fish發表於2017-12-23
  1. 服務提供者,服務消費者,和服務發現主鍵之間的關係
    ①在各個服務啟動時候,就已經將自己的網路地址等資訊註冊到服務發現元件裡面了並且儲存這些資訊
    ② 服務消費者可以從發現元件中查詢服務提供者的網路地址,並且用該地址呼叫服務提供的介面
    ③各個微服務與發現元件使用一定機制通訊。服務發現元件入長時間無法與某個微服務通訊的話。就會直接登出例項
    ④微服務網路地址發生改變時,會重新註冊到發現服務元件中,服務消費者就無需人工修改的提供網路的網址了
    2.下面看一下服務消費和服務提供者和服務消費者之間的關係
    這裡寫圖片描述
    3.Eureka介紹和使用
    3.1簡單的圖介紹Eureka的原理
    這裡寫圖片描述
    上面圖可能畫醜了點
    解釋一下上圖的意思吧
    Application Service相當於服務提供者
    Application Client 相當於服務消費者
    Maker Rometo Call 相當於Restful API
    看上面架構圖可以看出Eureka包含兩個元件,分別是:Eureka Client和Eureka Server。
    Eureka Server 作用是可以提供發現服務的能力,各個微服啟動,都會註冊自己的資訊並且儲存
    Eureka Client 是java的客戶端,微服務啟動後會發出心跳給延續自己的使用時間會週日期應該是預設為30秒,如果在一定時間沒沒有接受到微服的例項心跳,Eureka Server將會登出例項(預設時間是90秒)。假如是多個例項的話,它們之間會互相複製。來實現資料的同步。Eureka Client會快取服務的登錄檔中的資訊,從而降低了Eureka Server服務的壓力

4.寫一個Eureka Server
在application.properties配置如下

server.port=8082
#表示是否自己註冊到Eureka server 預設為true
eureka.client.register-with-eureka=false
#表示是否從Eureka Server獲取資訊
eureka.client.fetch-registry=false
#設定與Eureka Server互動地址。查詢服務和祖冊服務都需要依賴這個地址。預設是http://localhost:8761/eureka/
eureka.client.service-url.default-zone=http://localhost:8761/eureka/

啟動類程式碼如下新增@Eureka註解就可以訪問你的微服務

package com.zjm.demo;

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

@SpringBootApplication
@EnableEurekaServer
public class MiroserviceDiscoveryEurekaApplication {

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

訪問http://localhost:8761/ 顯示如下
這裡寫圖片描述
現在DSReplicas沒有微服註冊進來。
下面對提供者和服務消費者進行註冊
訪問http://localhost:8761/
這裡寫圖片描述
這個有錯誤,是因為兩個服務埠一直導致的,要改一下執行Tomcat的埠就行了,兩個服務都註冊進來的。
application,.properties 配置如下連個服務都是一致的只要改動server.port就可以了

#把應用名稱註冊的到Eureka Server上
spring.application.name=miroservice-consumer-movie
#這個8761 是預設的 可以看原始碼
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#表示IP註冊到Eureka Server
eureka.instance.ip-address=true
server.port=8081

MiroserviceConsumerMovieApplication.java,另個一個服務同理配置,這裡面的@EnableDiscoveryClient可以用@EnableEurekaClient
代替。@EnableDiscoveryClient為各個元件提供服務支援的。這裡只用到了單點服務

package com.zjm.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class MiroserviceConsumerMovieApplication {

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

相關文章