springCloud - 第6篇 - 網關的實現:ZUUL

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

在Spring Cloud 微服務系統中,一種常見的負載均衡方式是,客戶端的請求首先經過負載均衡(zuul、Ngnix),再到達服務網關(zuul集群),然后再到具體的服務。服務統一注冊到高可用的服務注冊中心集群,服務的所有的配置文件由配置服務管理,配置文件放在 git 倉庫,方便開發人員隨時更新配置。


Zuul 的主要功能是路由轉發和過濾器。路由功能是微服務的一部分,比如/api/user 轉發到到 user 服務,/api/shop 轉發到到 shop服務。zuul 默認和 Ribbon 結合實現了負載均衡的功能。

以上出自:https://blog.csdn.net/forezp/article/details/81041012?

實現網關:

1. file - new - module?

2. spring Initializr - module SDK 選擇自己的 JDK ,其余的可以不用填寫,next。

3. 填寫工程相關信息:包名、工程名等,next。

4. spring cloud routing - 勾選 zuul,next。

5. 工程名,代碼存放位置等,finish 。

6. 工程結構如下:

7.?pom.xml:(? 沒有使用base 工程的pom 。換來換去,只有 2.0.5 這個版本能正常引用所有 jar )

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zuul</groupId><artifactId>zuul</artifactId><version>0.0.1-SNAPSHOT</version><name>zuul</name><description>網關(路由)</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.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>Finchley.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

?8. 在工程啟動類上加注解:?@EnableZuulProxy ,開啟網關功能 。

package com.zuul.zuul;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
@EnableEurekaClient// 開啟網關
@EnableZuulProxy
public class ZuulApplication {public static void main(String[] args) {SpringApplication.run(ZuulApplication.class, args);}}

9. 配置文件:

# 注冊中心 - 端口: 1234、工程名: eureka (見 eureka 工程中配置)。
eureka.client.serviceUrl.defaultZone= http://localhost:1234/eureka/# 端口
server.port= 2222# 工程名
spring.application.name= zuul# 以/api-x/ 開頭的請求都轉發給服務 : ribbon
# ribbon 是服務名,見 ribbon 工程的配置文件 
zuul.routes.api-x.path= /api-x/**
zuul.routes.api-x.serviceId= ribbon# 以/api-y/開頭的請求都轉發給服務 :feign
zuul.routes.api-y.path = /api-y/**
zuul.routes.api-y.serviceId= feign

10. 在 feign 、ribbon 工程的 controller 中分別加上一句:“ 我來自服務 xxx ” :

11. 啟動 5 個工程:eureka(端口1234)、feign (端口8702)、ribbon(端口8701)、

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?see-param(端口8803)、zuul(端口2222) ,可見 4 個不同服務都已注冊成功 。

12. 測試?api-x 的請求、測試?api-y 的請求,可見實現了對應的轉發:

至此,網關的請求轉發就已經實現。

13. zuul 過濾功能實現 。

new 一個類:JYZuulFilter, 繼承?ZuulFilter ,實現其 abstract 方法:

package com.zuul.zuul;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;import java.util.Objects;/*** @author yujiang* @description* @date 2019/7/25 16:24*/
@Component
public class JYZuulFilter extends ZuulFilter {@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 0;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() throws ZuulException {RequestContext rc = RequestContext.getCurrentContext();if (Objects.isNull(rc.getRequest().getParameter("name"))) {rc.setSendZuulResponse(false);try {rc.getResponse().getWriter().write(" name cannot be null ...");} catch (Exception e) {}return null;}return null;}}

14. 測試 請求中不帶參數 name 時,服務接口返回:

請求中有參數 name 時,服務接口返回:

這樣,過濾功能也實現了。

-------------------------------------------------------------

下一篇:springCloud - 第7篇 - 配置文件管理中心 ( SpringCloud Config )

源碼見:https://gitee.com/FJ_WoMenDeShiJie/springcloud-zuul

-------------------------------------------------------------

PS:這個系列不定時更新,只是個人的學習分享,

內容全程參考書目:

《Spring Cloud 與 Docker 微服務架構空實戰?》、

《Spring Cloud 微服務實戰》及此書作者博客:http://blog.didispace.com/spring-cloud-learning/

《深入理解 Spring Cloud 與微服務構建》及此書作者博客:https://blog.csdn.net/forezp/article/details/70148833
--------------------------------------------------------------

以下出自:https://blog.csdn.net/forezp/article/details/81041012

關于 ZuulFilter:

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447611.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

亞特蘭大峰會精彩看點:軟件吞噬世界,OpenStack是變革核心

摘要&#xff1a;5月12日早9點&#xff0c;OpenStack Atlanta峰會在超過90家贊助廠商和4500名參會者的陪伴下拉開了序幕。Jonathan Bryce特別提出了Superuser和Marketplace兩個新概念&#xff0c;軟件正在吞噬整個世界&#xff0c;OpenStack是這場變革的核心。 第一天精彩看點…

Git 查看并修改 name 和 email

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 顯示name的方法&#xff1a; git config user.name git config --list 或者查看~/.gitconfig 文件。 改名字&#xff1a; # --global…

缺乏運動 七種病早早光臨

我們年輕&#xff0c;我們不怕病痛&#xff0c;但事實并非如此。常常聽著老一輩的念叨&#xff0c;說年輕人要動動&#xff0c;老了才不會這痛那痛的&#xff0c;覺得自己的身體“強大無比”&#xff0c;不會有疾病困擾&#xff0c;只是因為你不到那個年齡你理解不了。 當我們還…

解決: Gitee 自已提交的代碼提交人頭像為他人、碼云上獨自開發的項目顯示為 2 個開發者

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我的情況 &#xff1a; 項目一直只有我一個開發者&#xff0c;卻莫名的出來了一個完全不認識的開發者&#xff0c;我新建后 push 的…

為什么有些語言會比別的快?

摘要&#xff1a;為什么有些語言比別的快&#xff1a;JIT與字節碼的使用&#xff0c;帶來了Java和C#這樣介于前兩者之間的中間選擇&#xff1b;編譯型語言比解釋型快&#xff0c;引入的間接層越多&#xff0c;速度越慢&#xff1b;語言設施上的投入力度&#xff1b;語言本身的設…

Docker logs 查看實時日志(日志最后的N行、某刻后日志)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 docker logs &#xff1a; docker logs -f -t --since"2017-05-31" --tail10 edu_web_1 edu_web_1 為容器名&#xff0c;也可…

研發團隊平穩度過“從小到大”并非易事

摘要&#xff1a;創業團隊在經歷初期的艱難發展階段后&#xff0c;團隊的擴大也帶來一系列管理上的混亂&#xff0c;CTO俱樂部會員、呱呱視頻社區研發總監王國良分享了自己關于創業團隊發展的思考&#xff0c;他認為研發團隊想要平穩度過“從大到小”并非易事。 創過業的人都知…

解決:idea - maven project 中 jar 報紅線

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 如圖&#xff1a; 2. 找到報紅線的工程&#xff0c;執行 mvn clean后&#xff0c;再 mvn install 。這樣會從私服重新拉取 jar 。 …

云計算三大主流陣營的競爭與合作

摘要&#xff1a;目前&#xff0c;以AWS等為代表的互聯網陣營、以IBM、HP為代表的IT陣營以及以AT&T為代表的電信運營商陣營在云計算領域展開競爭與合作&#xff0c;但是未來三大陣營的競爭和合作將更加復雜&#xff0c;IaaS、PaaS和SaaS的界限也逐步消弭。 【編者按】云計…

springCloud - 第7篇 - 配置文件管理中心 ( SpringCloud Config )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、簡介 分布式的系統往往有多個服務&#xff0c;會有不同的配置文件。 不同環境配置文件內容也各不相同&#xff1a; 開發環境、測試…

成功必讀本:培養人脈的106個技巧

成功的道路上&#xff0c;人脈比知識更重要。發展人際關系應當是你優先級最高的事。《不要一個人吃飯( Never Eat Alone)》一書介紹了21世紀的交際規則。書中包括了許多實用技巧&#xff0c;讓你通過人際關系而興旺發達。 保留精華&#xff0c;以下是從書中總結的106條技巧。在…

springCloud - 第8篇 - 配置文件管理中心 - 集群模式(負載勻衡)使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 當微服務系統中 應用服務有很多時&#xff08;serviceA 、serviceB ...&#xff09;&#xff0c;會都從同一個配置中心讀取配置文件。此…

程序員的11個階段

程序員的職業生涯是一段充滿起伏的有趣經歷。考慮到其陡峭的學習曲線&#xff0c;完全可以預見你將經歷挫折、啟蒙、驕傲自大這幾個時期&#xff0c;以及穿插其間的各種心路歷程。在這篇文章中讓我們輕松一下&#xff0c;通過一系列搞笑 gif 圖來回顧其中的每一個階段 。 階段…

Docker 方式安裝 RabbitMQ (ribbitmq linux 部署)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 查找鏡像&#xff1a;&#xff08;management 版本的鏡像才有管理界面&#xff09; docker search rabbitmq:management2. 拉取鏡像…

中國股市6000點下跌創最大熊市 股民因貪欲被套牢

核心提示&#xff1a;人的欲望&#xff0c;他的那個欲望&#xff0c;他永遠在那個&#xff0c;你看漲了40我都不賣&#xff0c;還貪&#xff0c;還得到45&#xff0c;還貪。貪貪沒有完&#xff0c;跌到35了&#xff0c;35還覺得還能回去&#xff0c;跌30了。 鳳凰衛視5月14日《…

解決:c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我的情況&#xff1a; 在個人阿里云服務器上 docker 方式 安裝的 RabbitMQ&#xff0c;然后本地代碼連接一直報錯&#xff1a; 201…

中國股市低迷的根本原因

和訊網友“長江薦股”發文探討中國股市低迷的根本原因&#xff0c;我深表認同&#xff0c;特轉載于下&#xff1a; 1、當年股市為國企扭虧服務&#xff0c;給投資者埋下了后遺癥。1998年政府為了實現國企3年扭虧的目標&#xff0c;要求一家優質企業捆綁一家虧損企業一起上市&am…

解決:springcloud eureka 注冊的服務config-client 狀態Status:UNKNOWN (1)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. eureka 注冊的服務config-client 的 Status 顯示為&#xff1a;UNKNOWN (1)&#xff1a; 2.原因 &#xff1a; 配置信息 eureka.cl…

窮人靠力,富人借力!看完你將明白一切!

有個窮人&#xff0c;因為吃不飽穿不暖&#xff0c;而在佛祖面前痛哭流涕&#xff0c;訴說生活的艱苦&#xff0c;天天干活累的半死卻掙不來幾個錢。 哭了半晌他突然開始埋怨道&#xff1a;“這個社會太不公平了&#xff0c;為什么富人天天悠閑自在&#xff0c;而窮人就應該天…

解決:springcloud 啟動 config-client 報錯:... .integration.config.HandlerMethodArgumentResolversHolder

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. springcloud 啟動 config-client 報錯&#xff1a; java.lang.ClassNotFoundException: org.springframework.integration.config.…