Spring Cloud Eureka 服務治理以及高可用

Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分, 它基於 NetflixEureka 做了二次封裝, 主要負責完成微服務架構中的服務治理功能。 Spring Cloud 通過爲Eureka 增加了 Spring Boot 風格的自動化配置,我們只需通過簡單引入依賴和註解配置就能讓 Spring Boot 構建的微服務應用輕鬆地與 Eureka 服務治理體系進行整合。
瞭解springcloud架構可以加求求:三五三六二四七二五九
Eureka包含

Eureka服務端: 服務註冊中心

Eureka客戶端: 處理服務的註冊和發現

基礎架構

服務註冊中心: Eureka提供的服務端,提供服務註冊與發現功能。

服務提供者: 提供服務的應用,將自己提供的服務註冊到Eureka,以供其他應用發現。

服務消費者: 消費者應用從服務註冊中心獲取服務列表,從而使消費者可以知道去何處調用所需要的服務。

入門代碼

Eureka服務端編寫

1、新建一個Spring Boot項目,名爲eureka-server,引入依賴

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、配置文件
spring:
  application:
    name: eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: false # 不向註冊中心註冊自己
    fetch-registry: false # 不檢索服務
server:
  port: 8761

3、在啓動類上添加註解 @EnableEurekaServer

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

ok,啓動eureka-server

打開瀏覽器訪問 http://localhost:8761/
在這裏插入圖片描述
可以看到Eureka服務端已經完成了。就這麼簡單

Eureka客戶端編寫

1、新建一個Spring Boot項目,名爲eureka-client,引入依賴

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

記住一定要引入spring-boot-starter-web依賴,,不然項目啓動不起來自動停止。

2、配置文件

  spring:
  application:
    name: eureka-client
server:
  port: 8080
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3、啓動類配置註解 @EnableDiscoveryClient

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

啓動eureka-client客戶端,刷新eureka服務端頁面,已經顯出註冊的客戶端了
在這裏插入圖片描述
ok,客戶端也編寫完成了。

到此就結束了,

但真的就結束了嗎???

有人要問了,Spring Cloud Eureka服務端和客戶端都寫好了,但是怎麼使用呢?

下面就講各服務間怎麼調用。

新建個controller層

@RestController
public class HelloController {
 
    @RequestMapping(value = "/hello")
    public String index() {
        System.out.println("請求到了");
        return "hello";
    }
}

通過訪問 http://localhost:8080/hello 可以看到正常返回數據
在這裏插入圖片描述
新建一個Spring Boot項目,名爲eureka-consumer 配置和eureka-client類似,端口改一下,這裏改爲8085,啓動項目

再看一下eureka服務端的管理平臺,eureka-consumer已經註冊了。

微服務間調用這裏講兩種方式,一種是通過RestTemplate,一種是使用Spring Cloud Feign

在這之前要說一下Spring Cloud Ribbon

Ribbon是一個基於HTTP和TCP的客戶端負載均衡

如果微服務佈置多臺,就需要Ribbon進行負載均衡了。

eureka-client改下端口再啓動一個, 可以看到這裏已經有兩個實例了。
在這裏插入圖片描述
引入Ribbon依賴

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

RestTemplate 方式

RestTemplate實現了對HTTP請求的封裝處理

在啓動類上加入創建RestTemplate bean

@Bean
@LoadBalanced // 負載均衡註解
public RestTemplate restTemplate() {
    return new RestTemplate();
}

創建ConsumerController,

@RestController
public class ConsumerController {
 
    @Autowired
    private RestTemplate restTemplate;
 
    @RequestMapping(value = "/eureka-consumer")
    public String helloConsumer() {
        String result = restTemplate.getForEntity("http://eureka-client/hello", String.class).getBody();
        return result;
    }
}

訪問 http://localhost:8085/eureka-consumer 正常數據返回
在這裏插入圖片描述
Ribbon既然是負載均衡工具,那當然也要測試一下了。eureka-client改下端口在起一臺,然後訪問接口多次,通過打印日誌可以看出兩臺eureka-client都有被訪問,而且是以線性輪詢的方式被訪問,Ribbon默認是線性輪詢方式負載均衡。

Spring Cloud Feign 方式

Spring Cloud Feign是對RestTemplate進一步封裝,由它來幫助我們定義和實現依賴服務接口的定義。在Spring Cloud Feign的實現下,我們只需創建一個接口並用註解的方式來配置它。

快速入門

1、添加依賴

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、啓動類添加註解 @EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class RibbonConsumerApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}

3、定義接口ServiceClient 並添加註解@FeignClient(“eureka-client”) 參數爲在Eureka註冊的名稱

@FeignClient("eureka-client")
public interface ServiceClient {
 
    @RequestMapping(value = "/hello")
    String index();
}

4、在controller中注入ServiceClient 然後調用方法即可

@RestController
public class ConsumerController {
    
    @Autowired
    private ServiceClient serviceClient;
 
    @RequestMapping(value = "/eureka-consumer2")
    public String helloConsumer2() {
        String result = serviceClient.index();
        return result;
    }
}

訪問 http://localhost:8085/eureka-consumer2 也能正常返回數據

Eureka的高可用,通過互相註冊的方式實現。這裏啓動三臺Eureka服務端信息如下

eureka-server1 8761

eureka-server2 8762

eureka-server3 8763

配置信息入下

// eureka-server1的配置信息
spring:
  application:
    name: eureka-server1
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka,http://localhost:8763/eureka
    register-with-eureka: false
    fetch-registry: false # 不檢索服務
server:
  port: 8761
 
 
 
// eureka-server2的配置信息
spring:
  application:
    name: eureka-server2
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8763/eureka
    register-with-eureka: false
    fetch-registry: false # 不檢索服務
server:
  port: 8762
 
 
 
// eureka-server3的配置信息
spring:
  application:
    name: eureka-server3
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
    register-with-eureka: false
    fetch-registry: false # 不檢索服務
server:
  port: 8763

eureka-client保持配置不變,依然註冊在http://localhost:8761/eureka/ 上

瀏覽器分別訪問 http://localhost:8761/ http://localhost:8762/ http://localhost:8763/,查看到這三臺裏的服務註冊信息都有eureka-client, 那是因爲這三臺Eureka服務端之間互相註冊,所以都有eureka-client的註冊信息。

Eureka服務端配置了高可用,下面就是客戶端配置了。

修改eureka-client的配置文件

spring:
  application:
    name: eureka-client
server:
  port: 8081
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

這樣就可以註冊三臺Eureka服務端了。

到這裏是Spring Cloud Eureka入門和高可用講完了。

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