Jadual Kandungan
1.概述
2.REST应用
3. 前端应用程序
4.运行测试
5.定制Zuul过滤器
6.测试自定义Zuul过滤器
7.结论
Rumah Java javaTutorial 使用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
Salin selepas log masuk

让我们首先为我们将要使用的资源定义基本DTO:

public class Foo {
    private long id;    
    private String name;    
    // standard getters and setters
    }
Salin selepas log masuk

定义一个简单的控制器:

@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));
    }
}
Salin selepas log masuk

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>
Salin selepas log masuk

接下来 - 我们需要配置Zuul,因为我们正在使用Spring Boot,所以我们将在application.yml中执行此操作:

zuul:
  routes:
    foos:
      path: /foos/**
      url: http://localhost:8081/spring-zuul-foos-resource/foos
Salin selepas log masuk

注意:

  • 我们代理我们的资源服务器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>Foo Details</h1>
    <span>{{foo.id}}</span>
    <span>{{foo.name}}</span>
    <a href="#" ng-click="getFoo()">New Foo</a>
    </p>
    </body>
    </html>
Salin selepas log masuk

这里最重要的方面是我们如何使用相对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);
    }
}
Salin selepas log masuk

这里使用@EnableZuulProxy注解来启动Zuul代理,这非常干净和简洁。

4.运行测试

分别启动2个应用系统,在浏览器中输入http://localhost:8080/index
每点击一次“New Foo”按钮就访问后台REST API一次。
2018091113445319.png

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;
    }    // ...}
Salin selepas log masuk

这个简单的过滤器只是在请求头中添加了一个名为“ 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));
    }
}
Salin selepas log masuk

现在 - 让我们测试一下:

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

    assertEquals(200, response.getStatusCode());
    assertEquals("TestSample", response.getHeader("Test"));
}
Salin selepas log masuk

7.结论

在这篇文章中,我们专注于使用Zuul将请求从UI应用程序路由到REST API。我们成功地解决了CORS和同源策略,我们还设法定制和扩充了传输中的HTTP请求。

相关推荐:

spring cloud 之 Feign 使用HTTP请求远程服务

spring-cloud-sleuth+zipkin追踪服务实现(二)

Atas ialah kandungan terperinci 使用Spring Cloud Netflix Zuul代理网关访问后台REST服务的实现(代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Gunakan Spring Cloud dengan bijak untuk menyelesaikan masalah pengimbangan beban di bawah seni bina perkhidmatan mikro Gunakan Spring Cloud dengan bijak untuk menyelesaikan masalah pengimbangan beban di bawah seni bina perkhidmatan mikro Jun 23, 2023 pm 01:40 PM

Memandangkan kerumitan aplikasi perusahaan terus meningkat, semakin banyak perusahaan mula membahagikan aplikasi kepada berbilang perkhidmatan mikro dan melengkapkan keseluruhan proses perniagaan melalui kerjasama antara perkhidmatan mikro. Pendekatan seni bina ini boleh menjadikan aplikasi lebih stabil dan berskala, tetapi ia juga membawa beberapa masalah baharu, seperti pengimbangan beban, penemuan perkhidmatan, dsb. Artikel ini akan memperkenalkan cara menggunakan Spring Cloud untuk menyelesaikan masalah pengimbangan beban di bawah seni bina perkhidmatan mikro. Apakah pengimbangan beban? Pengimbangan Beban (LoadBalancing) merujuk kepada pengimbangan berbilang pelayan dan rangkaian

Analisis kod sumber Spring Cloud: Bahagian 1 Analisis kod sumber Spring Cloud: Bahagian 1 Aug 15, 2023 pm 04:04 PM

Secara peribadi, saya fikir prasyarat untuk membaca kod sumber ialah anda mesti boleh menggunakannya Setelah anda biasa dengannya, anda boleh meneka bagaimana orang lain melaksanakannya. Jika terdapat dokumen rasmi yang berkaitan, kemudian baca dokumen rasmi.

Pembangunan perkhidmatan mikro Spring Cloud berorientasikan perkhidmatan Pembangunan perkhidmatan mikro Spring Cloud berorientasikan perkhidmatan Jun 23, 2023 pm 12:30 PM

Dengan pembangunan Internet dan pengemaskinian berterusan teknologi, aplikasi tunggal tradisional tidak lagi dapat memenuhi keperluan pengguna, dan konsep perkhidmatan mikro telah muncul. SpringCloud ialah kit pembangunan perkhidmatan mikro yang dilancarkan oleh Pivotal Ia menyediakan pembangun cara yang sangat mudah untuk membina, menggunakan dan mengurus aplikasi seni bina perkhidmatan mikro. Artikel ini akan memperkenalkan pembangunan perkhidmatan mikro SpringCloud berorientasikan perkhidmatan secara terperinci, termasuk konsep dan seni bina SpringCloud, proses pembangunan perkhidmatan mikro dan

Pengerahan dan operasi seni bina perkhidmatan mikro Spring Cloud Pengerahan dan operasi seni bina perkhidmatan mikro Spring Cloud Jun 23, 2023 am 08:19 AM

Dengan perkembangan pesat Internet, kerumitan aplikasi peringkat perusahaan semakin meningkat dari hari ke hari. Sebagai tindak balas kepada keadaan ini, seni bina perkhidmatan mikro muncul. Dengan modularitinya, penggunaan bebas dan kebolehskalaan yang tinggi, ia telah menjadi pilihan pertama untuk pembangunan aplikasi peringkat perusahaan hari ini. Sebagai seni bina perkhidmatan mikro yang cemerlang, Spring Cloud telah menunjukkan kelebihan besar dalam aplikasi praktikal. Artikel ini akan memperkenalkan penggunaan dan pengendalian serta penyelenggaraan seni bina perkhidmatan mikro SpringCloud. 1. Gunakan seni bina perkhidmatan mikro SpringCloud SpringCloud

Cara menggunakan Java untuk membangunkan aplikasi orkestrasi kontena berdasarkan Spring Cloud Kubernetes Cara menggunakan Java untuk membangunkan aplikasi orkestrasi kontena berdasarkan Spring Cloud Kubernetes Sep 20, 2023 am 11:15 AM

Cara menggunakan Java untuk membangunkan aplikasi orkestrasi kontena berdasarkan Spring Cloud Kubernetes Dengan pembangunan dan aplikasi meluas teknologi kontena, alat orkestrasi kontena telah menjadi bahagian yang amat diperlukan dalam pembangun. Sebagai salah satu alat orkestrasi kontena yang paling popular, Kubernetes telah menjadi standard industri. Dalam konteks ini, menggabungkan Spring Cloud dan Kubernetes, kami boleh membangunkan aplikasi dengan mudah berdasarkan orkestrasi kontena. Artikel ini akan memperkenalkan secara terperinci

Pengenalan kepada rangka kerja Spring Cloud dalam bahasa Java Pengenalan kepada rangka kerja Spring Cloud dalam bahasa Java Jun 09, 2023 pm 10:54 PM

Pengenalan kepada rangka kerja SpringCloud dalam bahasa Java Dengan populariti pengkomputeran awan dan perkhidmatan mikro, rangka kerja SpringCloud telah menjadi salah satu rangka kerja pilihan untuk membina aplikasi asli awan dalam bahasa Java. Artikel ini akan memperkenalkan konsep dan ciri rangka kerja Spring Cloud dan cara menggunakan Spring Cloud untuk membina seni bina perkhidmatan mikro. Pengenalan kepada SpringCloud Rangka kerja SpringCloud ialah rangka kerja mikro perkhidmatan berdasarkan SpringBoot. ia adalah

Amalan mikroperkhidmatan Spring Cloud untuk melaksanakan kunci teragih Amalan mikroperkhidmatan Spring Cloud untuk melaksanakan kunci teragih Jun 22, 2023 pm 11:28 PM

Dengan populariti seni bina perkhidmatan mikro, semakin banyak pasukan pembangunan perusahaan mula menggunakan Spring Cloud untuk membina sistem perkhidmatan mikro mereka sendiri. Dalam persekitaran teragih, melaksanakan kunci teragih ialah cabaran teknikal yang penting. Artikel ini akan memperkenalkan cara melaksanakan amalan mikroperkhidmatan kunci teragih di bawah rangka kerja Awan Musim Bunga. Pertama, kita perlu memahami apa itu kunci yang diedarkan. Kunci teragih ialah teknologi yang digunakan untuk melindungi akses kepada sumber yang dikongsi Ia boleh memastikan bahawa dalam persekitaran yang diedarkan, berbilang nod tidak akan mengubah suai sumber yang sama pada masa yang sama atau

Gabungan perkhidmatan mikro Spring Cloud dan komponenisasi Gabungan perkhidmatan mikro Spring Cloud dan komponenisasi Jun 23, 2023 am 10:21 AM

Dengan pembangunan berterusan teknologi Internet, semakin banyak perusahaan mula menggunakan seni bina perkhidmatan mikro untuk membina sistem mereka. SpringCloud ialah rangka kerja perkhidmatan mikro yang telah muncul dengan pantas dalam konteks ini. Atas dasar ini, artikel ini akan membincangkan gabungan perkhidmatan mikro SpringCloud dan komponenisasi, dan menganalisis kelebihan dan kaedah pelaksanaannya. 1. Pengenalan kepada perkhidmatan mikro SpringCloud SpringCloud ialah versi projek SpringBoot yang dinaik taraf Ia menyediakan sejumlah besar alatan.

See all articles