SpringCloud+Eureka+Feign學習筆記

目錄

1.SpringCloud 簡介

1.1.什麼是 SpringCloud

1.2.SpringCloud 與 SpringBoot 的關係

1.3.SpringCloud 主要框架

1.4.SpringCloud 與 Dubbo 對比

1.5.說說 SpringCloud 的版本

2.服務發現組件 Eureka

2.1.Eureka簡介

2.2.Eureka服務端開發

1)搭建Eureka服務端微服務項目

​2)在pom.xml導入eureka服務端依賴

3)在application.yml配置eureka服務端

4)編寫啓動類(Eureka服務端註解)

2.3.Eureka客戶端(服務註冊)

1)在pom.xml導入eureka客戶端依賴

2)在application.yml配置eureka客戶端

3)在啓動類添加Eureka客戶端註解

4)訪問Eureka主頁http://127.0.0.1:6868/

2.4.保護模式

3. Feign 實現服務間調用

3.1.Feign簡介

3.2.案例

1)在pom.xml導入feign座標

2)在啓動類添加Feign註解

3)編寫遠程調用接口(*)

4)使用遠程調用接口完成服務調用

3.3.負載均衡(默認輪詢)


1.SpringCloud 簡介

1.1.什麼是 SpringCloud

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、熔斷器、數據監控等,都可以用 Spring Boot 的開發風格做到一
鍵啓動和部署。Spring 並沒有重複製造輪子, 它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過 Spring Boot 風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、 易部署和易維護的分佈式系統開發工具包。
Spring Cloud 項目的官方網址:http://projects.spring.io/spring-cloud/

 

1.2.SpringCloud SpringBoot 的關係

Spring Boot Spring 的一套快速配置腳手架,可以基於 Spring Boot 快速開發單個微服務, Spring Cloud 是一個基於 Spring Boot 實現的雲應用開發工具;Spring Boot 專注於快速、方便 集成的單個微服務個體,Spring Cloud關注全局的服務治理框架;
Spring Cloud可以不基於 Spring Boot 嗎?
不可以。
 

1.3.SpringCloud 主要框架

服務發現——Netflix Eureka
服務調用——Netflix Feign
熔斷器———Netflix Hystrix
服務網關——Netflix Zuul
分佈式配置—Spring Cloud Config
消息總線 ——Spring Cloud Bus
 

1.4.SpringCloud Dubbo 對比

Dubbo 只是實現了服務治理,而 Spring Cloud 下面有 17 個子項目(可能還會新增)分別覆蓋了微服務架構下的方方面面,服
務治理只是其中的一個方面,一定程度來說,Dubbo 只是 Spring CloudNetflix 中的一個子集。
 
  Dubbo   SpringCloud
服務註冊中心  Zookeeper  Spring Cloud Netflix Eureka
服務調用方式  RPC  REST API
服務網關  無  Spring Cloud Netflix Zuul
熔斷器  不完善  Spring Cloud Netflix Hystrix
分佈式配置  Spring Cloud Config
服務跟蹤  無  Spring Cloud Sleuth
消息總線   Spring Cloud Bus
數據流   Spring Cloud Stream
批量任務  Spring Cloud Task
……  ……  ……

1.5.說說 SpringCloud 的版本

Spring Boot  Spring Cloud
1.2.x  Angel 版本
1.3.x  Brixton 版本
1.4.x  Camden 版本
1.5.x  Dalston 版本、Edgware 版本
2.0.x  Finchley 版本
 

2.服務發現組件 Eureka

2.1.Eureka簡介

EurekaNetflix開發的服務發現框架SpringCloud將它集成在自己的子項目
spring-cloud-netflix中,實現SpringCloud的服務發現功能。Eureka包含兩個組件:
EurekaServerEurekaClient
 
 

2.2.Eureka服務端開發

1)搭建Eureka服務端微服務項目


2)在pom.xml導入eureka服務端依賴

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


3)在application.yml配置eureka服務端

server:
  port: 6868

eureka:
  client:
    registerWithEureka: false   #是否將自己註冊到 Eureka 服務中,本身就是,無需註冊
    fetchRegistry: false  #是否從Euraka中獲取註冊信息
    serviceUrl: #Eureka 客戶端與 Eureka 服務端進行交互的地址
      defaultZone: http://127.0.0.1:${server.port}/eureka/


4)編寫啓動類(Eureka服務端註解)

package com.tensquare.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

 

2.3.Eureka客戶端(服務註冊

1)在pom.xml導入eureka客戶端依賴

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


2)在application.yml配置eureka客戶端

server:
  port: 9010
spring:
  application:
    name: tensquare-friend

eureka:
  client:
    service-url:
      defaultZone: http://localhost:6868/eureka
    instance:
      prefer-ip-address: true



3)在啓動類添加Eureka客戶端註解

package com.tensquare.friend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class FriendApplication {
    public static void main(String[] args) {
        SpringApplication.run(FriendApplication.class,args);
    }

}

 

4)訪問Eureka主頁http://127.0.0.1:6868/

如圖所示,我們單個微服務註冊成功

 

2.4.保護模式

如果在EurekaServer的首頁看到以下這段提示,則說明Eureka已經進入了保護模式:
EurekaServer在運行期間,會統計心跳失敗的比例在15分鐘之內是否低於85%,如果出現
低於的情況(在單機調試的時候很容易滿足,實際在生產環境上通常是由於網絡不穩定導
致),EurekaServer會將當前的實例註冊信息保護起來,同時提示這個警告。保護模式主要
用於一組客戶端和EurekaServer之間存在網絡分區場景下的保護。一旦進入保護模式,
EurekaServer將會嘗試保護其服務註冊表中的信息,不再刪除服務註冊表中的數據(也就是
不會註銷任何微服務)。
 

3. Feign 實現服務間調用

3.1.Feign簡介

Feign是簡化JavaHTTP客戶端開發的工具(java-to-httpclient-binder),它的靈感
來自於RetrofitJAXRS-2.0WebSocketFeign的初衷是降低統一綁定DenominatorHTTP
API的複雜度,不區分是否爲restful
 

3.2.案例

1)在pom.xml導入feign座標

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

2)在啓動類添加Feign註解

package com.tensquare.friend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import util.JwtUtil;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableDiscoveryClient
public class FriendApplication {
    public static void main(String[] args) {
        SpringApplication.run(FriendApplication.class,args);
    }

}

3)編寫遠程調用接口(*)

package com.tensquare.friend.client;
import entity.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * 調用其他微服務注意事項
 * 1.調用方與被調用方都需要註冊eureka中
 * 2.調用接口需要寫上被調用方的服務名,即application.yml中的spring: application: name: tensquare-user
 * 3.服務名不能帶下劃線_,eureka會識別不到
 * 4.調用方法跟被調用方contorller方法名一致
 * 5.@RequestMapping--value記得帶上全url,例如最上方的/user
 * 6.@PathVariable後一定要帶上("參數"),參數需要跟上方路徑參數一致,否則會識別不到參數
 */
@FeignClient("tensquare-user")
public interface UserClient {

    /**
     * 更新用戶關注數
     */
    @RequestMapping(value = "/user/updateFollowcount/{userid}/{x}", method = RequestMethod.PUT)
    public Result updateFollowcount(@PathVariable("userid") String userid, @PathVariable("x") int x);

    /**
     * 更新用戶粉絲
     */
    @RequestMapping(value = "/user/updateFanscount/{userid}/{x}", method = RequestMethod.PUT)
    public Result updateFanscount(@PathVariable("userid") String userid, @PathVariable("x") int x);

}


4)使用遠程調用接口完成服務調用

 

3.3.負載均衡(默認輪詢)

測試:同時開啓多個基礎微服務,看是否是輪流調用。

 

發佈了48 篇原創文章 · 獲贊 88 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章