目錄
1.概述
2.REST應用程式
3 . 前端應用程式
Foo Details
4.執行測試
5.自訂Zuul過濾器
6.測試自訂Zuul過濾器
7.結論
首頁 Java java教程 使用Spring Cloud Netflix Zuul代理網關存取後台REST服務的實作(程式碼)

使用Spring Cloud Netflix Zuul代理網關存取後台REST服務的實作(程式碼)

Sep 11, 2018 pm 02:12 PM
spring cloud

這篇文章帶給大家的內容是關於使用Spring Cloud Netflix Zuul代理網關存取後台REST服務的實現(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

1.概述

在本文中,我們將探討如何在互相單獨部署的前端應用程式和後端REST API服務之間進行通訊。目的是解決瀏覽器的跨網域資源存取和同源策略限制,讓頁面UI能夠呼叫後台的API,即使它們不在同一個伺服器中。

我們在這裡創建了兩個獨立的應用程式 - 一個UI應用程式和一個簡單的REST API,我們將在UI應用程式中使用Zuul代理程式來代理對REST API的呼叫。 Zuul是Netflix基於JVM的路由器和伺服器端負載平衡器。 Spring Cloud與嵌入式Zuul代理程式有很好的整合。

2.REST應用程式

我們的REST API應用程式是一個簡單的Spring Boot應用程式。在本文中將在連接埠8081上執行伺服器中部署的API 。

設定檔

server.contextPath=/spring-zuul-foos-resourceserver.port=80
81
登入後複製

讓我們先為我們將要使用的資源定義基本DTO:

public class Foo {
    private long id;    
    private String name;    
    // standard getters and setters
    }
登入後複製

定義一個簡單的控制器:

@Controllerpublic class FooController {

    @RequestMapping(method = RequestMethod.GET, value = "/foos/{id}")    
    @ResponseBody
    public Foo findById(
      @PathVariable long id, HttpServletRequest req, HttpServletResponse res) {        
      return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4));
    }
}
登入後複製

3 . 前端應用程式

我們的UI應用程式也是一個簡單的Spring Boot應用程式。在本文中此應用運行在連接埠8080上。

首先,我們需要透過Spring Cloud向我們的UI應用程式的pom.xml添加對zuul支援的依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>
登入後複製

接下來- 我們需要配置Zuul,因為我們正在使用Spring Boot,所以我們將在application.yml中執行此操作:

zuul:
  routes:
    foos:
      path: /foos/**
      url: http://localhost:8081/spring-zuul-foos-resource/foos
登入後複製

注意:

  • 我們代理我們的資源伺服器Foos。

  • 來自UI的所有以「 / foos / 」開頭的請求將被路由到我們的Foos資源伺服器,位址為:http:// loclahost:8081/spring-zuul- foos-resource / foos /

然後寫我們的主頁index.html — 這裡使用一些AngularJS:

<html>
<body ng-app="myApp" ng-controller="mainCtrl">
<script src="angular.min.js"></script>
<script src="angular-resource.min.js"></script>
<script>
var app = angular.module(&#39;myApp&#39;, ["ngResource"]);

app.controller(&#39;mainCtrl&#39;, function($scope,$resource,$http) {
    $scope.foo = {id:0 , name:"sample foo"};
    $scope.foos = $resource("/foos/:fooId",{fooId:&#39;@id&#39;});

    $scope.getFoo = function(){
        $scope.foo = $scope.foos.get({fooId:$scope.foo.id});
    }  
});</script><p>
    <h1 id="Foo-nbsp-Details">Foo Details</h1>
    <span>{{foo.id}}</span>
    <span>{{foo.name}}</span>
    <a href="#" ng-click="getFoo()">New Foo</a>
    </p>
    </body>
    </html>
登入後複製

這裡最重要的方面是我們如何使用相對URL訪問API !
請記住,API應用程式未部署在與UI應用程式相同的伺服器上,因此相對URL不起作用,並且在沒有代理程式的情況下不起作用。
但是,透過代理,我們透過Zuul代理存取Foo資源,Zuul代理配置為將這些請求路由到實際部署API的位置。

最後,啟用Boot的應用程式:

@EnableZuulProxy@SpringBootApplicationpublic class UiApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(UiApplication.class, args);
    }
}
登入後複製

這裡使用@EnableZuulProxy註解來啟動Zuul代理,這非常乾淨和簡潔。

4.執行測試

分別啟動2個應用系統,在瀏覽器中輸入http://localhost:8080/index  
每點擊一次「New Foo」按鈕就訪問後台REST API一次。
使用Spring Cloud Netflix Zuul代理網關存取後台REST服務的實作(程式碼)

5.自訂Zuul過濾器

有多個Zuul過濾器可用,我們也可以創建自己的自訂過濾器:

@Componentpublic class CustomZuulFilter extends ZuulFilter {

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        ctx.addZuulRequestHeader("Test", "TestSample");        
        return null;
    }    @Override
    public boolean shouldFilter() {       
    return true;
    }    // ...}
登入後複製

這個簡單的過濾器只是在請求頭中添加了一個名為“ Test ” 的屬性- 當然,我們可以根據需要增加我們的請求。

6.測試自訂Zuul過濾器

最後,讓我們測試一下,確保我們的自訂過濾器正常運作- 首先我們將在Foos資源伺服器上修改我們的FooController:

@Controllerpublic class FooController {

    @GetMapping("/foos/{id}")    @ResponseBody
    public Foo findById(
      @PathVariable long id, HttpServletRequest req, HttpServletResponse res) {        
      if (req.getHeader("Test") != null) {
            res.addHeader("Test", req.getHeader("Test"));
        }        return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4));
    }
}
登入後複製

現在- 讓我們測試一下:

@Testpublic void whenSendRequest_thenHeaderAdded() {    
Response response = RestAssured.get("http://localhost:8080/foos/1");

    assertEquals(200, response.getStatusCode());
    assertEquals("TestSample", response.getHeader("Test"));
}
登入後複製

7.結論

在這篇文章中,我們專注於使用Zuul將請求從UI應用程式路由到REST API。我們成功地解決了CORS和同源策略,我們也設法客製化和擴充了傳輸中的HTTP請求。

相關推薦:

spring cloud 之Feign 使用HTTP請求遠端服務

spring-cloud-sleuth zipkin追蹤服務實作(二)

以上是使用Spring Cloud Netflix Zuul代理網關存取後台REST服務的實作(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

巧用Spring Cloud解決微服務架構下的負載平衡問題 巧用Spring Cloud解決微服務架構下的負載平衡問題 Jun 23, 2023 pm 01:40 PM

隨著企業應用的複雜度不斷增加,越來越多的企業開始將應用程式拆分為多個微服務,透過微服務之間的協作完成整個業務流程。這種架構方式能夠使應用程式更加穩定、擴展性更強,但同時也帶來了一些新的問題,例如負載平衡,服務發現等。本文將介紹如何透過SpringCloud來解決微服務架構下的負載平衡問題。什麼是負載平衡?負載平衡(LoadBalancing)是指在多個伺服器、網

Spring Cloud原始碼分析:第一篇 Spring Cloud原始碼分析:第一篇 Aug 15, 2023 pm 04:04 PM

個人覺得看原始碼的前提是得會用,用熟了可以猜猜別人是怎麼實現的,如果有相關官方文件那就在看看官方文件。

面向服務的Spring Cloud微服務開發 面向服務的Spring Cloud微服務開發 Jun 23, 2023 pm 12:30 PM

隨著網路的發展和科技的不斷更新,傳統的單體應用已經無法滿足使用者需求,微服務的概念應運而生。 SpringCloud是一個由Pivotal公司推出的微服務開發工具包,它為開發人員提供了一種極為方便的方式來建置、部署和管理微服務架構應用程式。本文將對服務導向的SpringCloud微服務開發進行詳細介紹,包括SpringCloud的概念與架構、微服務開發流程以

Spring Cloud微服務架構部署與維 Spring Cloud微服務架構部署與維 Jun 23, 2023 am 08:19 AM

隨著網路的快速發展,企業級應用的複雜度日益增加。針對這種情況,微服務架構應運而生。它以模組化、獨立部署、可擴展性高等特點,成為當今企業級應用開發的首選。作為一種優秀的微服務架構,SpringCloud在實際應用中展現了極大的優勢。本文將介紹SpringCloud微服務架構的部署與維運。一、部署SpringCloud微服務架構SpringCloud

如何使用Java開發一個基於Spring Cloud Kubernetes的容器編排應用 如何使用Java開發一個基於Spring Cloud Kubernetes的容器編排應用 Sep 20, 2023 am 11:15 AM

如何使用Java開發一個基於SpringCloudKubernetes的容器編排應用隨著容器技術的發展和廣泛應用,容器編排工具也成為了開發人員不可或缺的一部分。 Kubernetes作為目前最受歡迎的容器編排工具之一,已經成為了業界的標準。在此背景下,結合SpringCloud和Kubernetes,我們可以很方便地開發出基於容器編排的應用程式。本文將詳細介紹

Java語言中的Spring Cloud框架介紹 Java語言中的Spring Cloud框架介紹 Jun 09, 2023 pm 10:54 PM

Java語言中的SpringCloud框架介紹隨著雲端運算和微服務的流行,SpringCloud框架成為了Java語言中建構雲端原生應用的首選框架之一。本文將介紹SpringCloud框架的概念與特點,以及如何使用SpringCloud建構微服務架構。 SpringCloud簡介SpringCloud框架是基於SpringBoot的微服務框架。它為

實現分散式鎖的Spring Cloud微服務實踐 實現分散式鎖的Spring Cloud微服務實踐 Jun 22, 2023 pm 11:28 PM

隨著微服務架構的流行,越來越多的企業開發團隊開始使用SpringCloud建立自己的微服務系統。在分散式環境下,實現分散式鎖是一項重要的技術挑戰。本文將介紹在SpringCloud框架下,如何實現分散式鎖定的微服務實踐。首先,我們要了解什麼是分散式鎖。分散式鎖是一種用於保護共享資源的存取的技術,它可以保證在分散式環境下多個節點不會同時對相同資源進行修改或

Spring Cloud微服務與元件化的結合 Spring Cloud微服務與元件化的結合 Jun 23, 2023 am 10:21 AM

隨著網路技術的不斷發展,越來越多的企業開始採用微服務架構來建構其係統。而SpringCloud則是在這背景下快速崛起的微服務框架。在此基礎上,這篇文章將對SpringCloud微服務和組件化的結合進行探討,分析其優點和實現方式。一、SpringCloud微服務的簡介SpringCloud是SpringBoot專案的升級版,它提供了大量的工

See all articles