服務註冊與發現組件Eureka

服務註冊與發現組件Eureka

一.Eureka簡介

Eureka是一個用於服務註冊和發現的組件,分爲Eureka Server 和 Eureka Client,Eureka Server爲Eureka的服務註冊中心, Eureka Client爲Eureka客戶端。它是Spring Cloud推薦的服務註冊與發現組件,與Spring Cloud其他組件可以無縫對接。
服務消費基本過程如下:首先服務提供者Eureka Client 向服務註冊中心Eureka Server 註冊,將自己的信息通過REST API形式提交給服務註冊中心。服務消費者Eureka Client也向服務註冊中心註冊,同時服務消費者獲取一份服務註冊列表信息, 該列表信息包含了所有向服務註冊中心註冊的服務信息。獲取服務註冊信息後,服務消費者就知道服務提供者的IP地址,可以通過Http遠程調用來消費服務。

二.創建一個Eureka Server

創建一個Spring Boot工程,選擇組件的時候將Eureka Server加上。
這裏寫圖片描述

創建好工程後src/main/resources目錄下默認的配置文件是application.properties,我們將它換成結構更加清晰的yml文件,並做程序的相關配置。首先通過server,port指定Eureka Server的端口。在默認情況下Eureka Server會向自己註冊,這時候需要配置eureka.client.register-with-eureka和eureka.client.fetch-registry爲false,防止自己註冊自己。

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone

在工程啓動類EurekaServerApplication上加上@EnableEurekaServer註解,開啓Eureka Server的功能。

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

Eureka Server工程已經搭建好了,啓動程序,訪問Eureka Server的主頁面http://localhost:8761看看效果吧。
這裏寫圖片描述
Instances currently registered with Eureka 這欄上目前還沒有任何註冊的服務實例,這是正常的因爲還沒有服務在服務中心上註冊。

整個工程結構如圖:
這裏寫圖片描述

三.Eureka Client

創建一個Eureka Client工程,它向服務註冊中心Eureka Server註冊。創建Spring Boot工程的時候選擇Eureka Discovery和web組件
這裏寫圖片描述
同樣將src/main/resources目錄下的application.properties換成目錄結構更加清晰的application.yml文件,並做些相關配置。

server:
  port: 8762

spring:
  application:
    name: eureka-client1

eureka:
  client:
    service-url:
      defaultZone : http://localhost:8761/eureka/

配置程序名爲eureka-client1,程序端口爲8762,服務註冊地址爲http://localhost:8761/eureka/。defaultZone是默認區域的意思,區域是指服務器所在的區域每個區域一般由多個可用區域組成。這邊配的區域是Eureka Server的註冊地址。

在工程的啓動類上加上@EnableEurekaClient註解,開啓Eureka Client功能。

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

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {

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

啓動Eureka Client工程,打開瀏覽器登錄Eureka Server 的UI,http://localhost:8761。看到有個服務已經註冊了名稱叫EUREKA-CLIENT1。這個名稱很重要服務間的調用就是根據這個名稱。
這裏寫圖片描述

四.測試

我們在Reueka-client工程寫一個controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private DiscoveryClient client;

    @RequestMapping("/test")
    public String test(){
        ServiceInstance instance = client.getInstances("eureka-client1").get(0);
        String host = instance.getHost();
        int port = instance.getPort();
        String url = instance.getUri().toString();
        String serviceId = instance.getServiceId();

        return "host is : " + host + ", port is : " + port + " , url is : " + url +" , serviceId is " + serviceId ;
    }
}

瀏覽器訪問 http://localhost:8762/test ,獲得服務的基本信息 。頁面上顯示如圖:
這裏寫圖片描述
工程結構:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章