1. 程式人生 > >第十二天:浪跡天涯網上商城(1.0版本)--spring cloud zuul閘道器搭建

第十二天:浪跡天涯網上商城(1.0版本)--spring cloud zuul閘道器搭建

1、需求

我們都知道專案中的服務是越來越多的,如果沒有一個統一的閘道器來做分發,那麼就會將複雜度帶到客戶端,所以我們必須搭建閘道器。

2、實現步驟

1、建立一個專案langjitianya-gateway

2、準備好pom.xml檔案

3、準備好配置檔案

4、準備好啟動類

5、run 起來

6、訪問驗證

3、具體實現

1、專案結構簡圖

2、pom配置檔案

<groupId>com.niepengfei.langjitianya</groupId>
    <artifactId>langjitianya-gateway</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>langjitianya-gateway</name>
    <description>浪跡天涯商城閘道器</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.12.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-web</artifactId>
        </dependency>
    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3、配置檔案application.properties

#服務埠
server.port=5555

#服務名稱
spring.application.name=langjitianya-gateway

## 註冊中心eurka地址
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

#給閘道器地址加上版本號
zuul.prefix=/v1

# 商品服務閘道器
zuul.routes.item-service.path=/itemservice/api/**
zuul.routes.item-service.serviceId=langjitianya-itemservice

4、啟動類


5、run


6、測試, 訪問:http://localhost:5555/v1/itemservice/api/item/list.json?page=1&rows=2

4、服務降級處理

1、服務降級處理類


具體原始碼參考如下:

package com.niepengfei.langjitianya.gateway.fallback.itemservice;

import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author Jack
 */
@Component
public class ItemServiceFallbackProvider implements FallbackProvider {

    /**
     *  只對langjitianya-itemservice做降級處理, 如果需要對所有的服務都加降級處理
     *  只需要將字串變成“*”
     * @return
     */
    @Override
    public String getRoute() {
        return "langjitianya-itemservice";
    }

    @Override
    public ClientHttpResponse fallbackResponse(Throwable cause) {
        return this.fallbackResponse();
    }

    @Override
    public ClientHttpResponse fallbackResponse() {

        return new ClientHttpResponse(){
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return HttpStatus.OK.value();
            }

            @Override
            public String getStatusText() throws IOException {
                return "OK";
            }

            @Override
            public void close() {

            }

            @Override
            public InputStream getBody() throws IOException {
                return new ByteArrayInputStream("error".getBytes());
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders = new HttpHeaders();
                httpHeaders.setContentType(MediaType.APPLICATION_JSON);
                return httpHeaders;
            }
        };
    }
}

2、服務降級測試

第一步:首先停掉langjitianya-itemservice服務。

第二步:訪問 http://localhost:5555/v1/itemservice/api/item/list.json?page=1&rows=2


5、程式碼託管

相關推薦

浪跡天涯網上商城(1.0版本)--spring cloud zuul搭建

1、需求我們都知道專案中的服務是越來越多的,如果沒有一個統一的閘道器來做分發,那麼就會將複雜度帶到客戶端,所以我們必須搭建閘道器。2、實現步驟1、建立一個專案langjitianya-gateway2、準備好pom.xml檔案3、準備好配置檔案4、準備好啟動類5、run 起來

浪跡天涯網上商城(1.0版本)--引入spring cloud sleuth分散式鏈路追蹤

1、需求 我們都知道隨著專案的發展,各個底層的服務呼叫關係複雜,有時候因為某個服務的效能問題導致整個呼叫鏈出現故障,那麼排查問題是很困難的。現在我們引入Spring Cloud Sleuth分散式鏈路追蹤來解決這個問題。 2、Spring Cloud Sleut

浪跡天涯網上商城(1.0版本)--Feign基礎使用教程

1、為什麼選擇Feign而不是其他 Feign使得 Java HTTP 客戶端編寫更方便。Feign 靈感來源於Retrofit、JAXRS-2.0和WebSocket。Feign 最初是為了降低統一繫結Denominator 到 HTTP API 的複雜度,不區分是否支援

python學習閉包函數與裝飾

源代碼 -s 為什麽 pre def func stop 修改 rom 閉包函數: 什麽是閉包函數: 閉指的是定義在一個函數內部 包指的是該函數包含對外部作用域(非全局作用域)名字的引用 def counter():   n=0   d

【譯】你不知道的 Chrome 除錯工具技巧 忍者日誌列印!(the ninja logs)

特別宣告 本文是作者 Tomek Sułkowski 釋出在 medium 上的一個系列。據作者透露一共有 24 篇,一直更新到 12 月 24 日 版權歸原作者所有。 作者在Twitter上推薦我們的中文翻譯啦,截圖在最後 譯者在翻譯前已經和作者溝通得到了翻譯整個系列的授權。 為了不影響大家閱讀,授權

自學python 數字 三角函式+數學常量

#python 三角函式 ''' 函式 描述 acos(x) 返回x的反餘弦弧度值。 asin(x) 返回x的反正弦弧度值。 atan(x) 返回x的反正切弧度值。 atan2(y,

Spring學習FactoryBean配置bean

Spring 中有兩種型別的 Bean, 一種是普通Bean, 另一種是工廠Bean, 即FactoryBean. 工廠 Bean 跟普通Bean不同, 其返回的物件不是指定類的一個例項, 其返回的是該工廠 Bean 的 getObject 方法所返回的物件

Spring Cloud實戰 | 一篇Spring Cloud Gateway 實現對RESTful介面許可權控制和按鈕許可權控制

## 一. 前言 hi,大家好,這應該是農曆年前的關於開源專案[有來商城](https://github.com/hxrui) 的最後一篇文章了。 [有來商城](https://github.com/hxrui) 是基於 Spring Cloud OAuth2 + Spring Cloud Gateway

Spring Cloud實戰 | 一篇Spring Cloud Gateway實現對RESTful介面許可權和按鈕許可權細粒度控制

## 一. 前言 hi,大家好,這應該是農曆年前的關於開源專案[有來商城](https://github.com/hxrui) 的最後一篇文章了。 [有來商城](https://github.com/hxrui) 是基於 Spring Cloud OAuth2 + Spring Cloud Gateway

Spring Cloud gateway 服務 斷言、過濾器

微服務當前這麼火爆的程度,如果不能學會一種微服務框架技術。怎麼能升職加薪,增加簡歷的籌碼?spring cloud 和 Dubbo 需要單獨學習。說沒有時間?沒有精力?要學倆個框架?而Spring Cloud alibaba只需要你學會一個就會擁有倆種微服務治理框架技術。何樂而不為呢?加油吧!騷猿年 上一篇我

從零搭建Spring Cloud Gateway)—— 列印請求響應日誌

作為閘道器,日誌記錄是必不可少的功能,可以在網關出增加requestId來查詢整個請求鏈的呼叫執行情況等等。 # 列印請求日誌 列印請求日誌最重要的就是列印請求引數這些東西,不過RequestBody通常情況下在被讀取一次之後就會失效,這樣的話,下游的服務就不能正常獲取到請求引數了。所以我們需要重寫下請求體

樂優商城(Elasticsearch)

spring data Elasticsearch1.匯入依賴<dependencies> <dependency> <groupId>org.springframework.boot</groupId>

Ng支持向量機(Support Vector Machines)(

.com htm 條件 hid cti 無法 技術 add 效果 7 核函數(Kernels) 考慮我們最初在“線性回歸”中提出的問題,特征是房子的面積x,這裏的x是實數,結果y是房子的價格。假設我們從樣本點的分布中看到x和y符合3次曲線,那麽我們希望使用x的三次多項式來逼

python

() ati urn col nbsp div 斐波那契數 傳值 log 第二模塊學習: 生成器,叠代器,內置函數 生成器特點:只有在調用時才會生成相應的數據,運行的速度快! 示例: 1 def fil(max):#斐波那契數 2 n,a,b=0,0,1

查找與處理文件

路徑 完整 管理員 arc 數據庫 保存 查詢 執行 處理 目標 使用 locate 使用 find 使用 Gnome Search tool locate 基於預先定義的數據庫定義,這個數據庫保存了所有文件的路徑和權限 非實時查詢

python自動化開發-[]-前端Css

html cto 導致 比較 基本語法 itl 一個 pan pytho CSS基本語法   CSS 規則由兩個主要的部分構成:選擇器,以及一條或多條聲明。 selector { property: value;

手機影音,集成vitamio萬能播放

集成vitamio萬能播放器 Vitamio 是一款 Android 與 iOS 平臺上的全能多媒體開發框架,全面支持硬件解碼與 GPU 渲染。Vitamio 憑借其簡潔易用的 API 接口贏得了全球眾多開發者的青睞。到目前,全球已經有超過 一萬 種應用在使用 Vitamio,覆蓋用戶超過 5億 。Vi

愛創課堂每日一題 XSS原理及防範?

前端 前端學習 前端入門 Xss(cross-site scripting)攻擊指的是攻擊者往Web頁面裏插入惡意 html標簽或者javascript代碼。比如:攻擊者在論壇中放一個看似安全的鏈接,騙取用戶點擊後,竊取cookie中的用戶私密信息;或者攻擊者在論壇中加一個惡意表單,當用戶提交表單

HTML基礎

項目 logs 瀏覽器 圖片 handle 標題欄 width light 標題 本篇內容 HTML概述 HTML常用基本標簽 CSS格式引入 一、 HTML概述 1.定義: HTML,超文本標記語言,寫給瀏覽器的語言,目前網絡上應用最廣泛的語言。HTML也在不斷

類的無參方法

使用方法 成員變量和局部變量 必須 技術 sun公司 語句 步驟 語法規則 前綴 第十二章: 類的無參方法 類 定義類的方法 類的方法必須包括:1.方法名稱 2.方法返回值