摘要:前言在體系中扮演著統(tǒng)一網(wǎng)關的角色,負責與外部交互。與結(jié)合使用,可以根據(jù)服務名來訪問后端的服務,對于而言,也是一個。這段代碼表示,如果請求中沒有信息,就會報錯。
前言
Zuul在Spring Cloud 體系中扮演著統(tǒng)一網(wǎng)關的角色,負責與外部交互。用戶可以通過不同的URL特征來訪問不同的后端服務,類似于Nginx代理的效果。Zuul與Eureka結(jié)合使用,可以根據(jù)服務名來訪問后端的服務,對于Eureka而言,Zuul也是一個Eureka Client。系統(tǒng)的信息流入流出都需要經(jīng)過Zuul,在Zuul中,我們可以統(tǒng)一監(jiān)控流量,統(tǒng)一安全認證,統(tǒng)一報文組裝等等。
本文來源于我的博客網(wǎng)站:http://51think.net
一、Zuul網(wǎng)關在本例中的架構(gòu)從圖中可以看到,之前博客中提到的srping-cloud-ribbon-client應用以及spring-cloud-eureka-myservice應用都有參與。這兩個應用和spring-cloud-zuul都屬于Eureka的client,因此都需要在Eureka中進行注冊,否則無法相互調(diào)用。
二、創(chuàng)建Zuul應用1、IDEA創(chuàng)建module,選擇Zuul
2、pom文件中添加web組件以及Eureka組件
4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.6.RELEASE com.example spring-cloud-zuul 0.0.1-SNAPSHOT spring-cloud-zuul Demo project for Spring Boot 1.8 Greenwich.SR2 org.springframework.cloud spring-cloud-starter-netflix-zuul org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-plugin
3、applicaton類加上注解@EnableZuulProxy和@EnableEurekaClient,開啟Zuul功能
@EnableZuulProxy @EnableEurekaClient @SpringBootApplication public class SpringCloudZuulApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudZuulApplication.class, args); } }
4、修改application.yml文件
eureka: client: serviceUrl: defaultZone: http://localhost:8010/eureka/ server: port: 8030 spring: application: name: cloudZuul zuul: routes: ribbonClient: path: /ribbonClient/** serviceId: ribbonClient
其中 path: /ribbonClient/**表示URL中如果帶有/ribbonClient/將被代理到serviceId為ribbonClient的服務中去。
三、啟動觀察啟動spring-cloud-zuul之后,訪問Eureka面板,觀察cloudZuul是否在服務列表中。
在之前的ribbon博客中,我們的訪問地址是http://localhost:8020/sayHello?say=helloWorld,現(xiàn)在我們通過Zuul來訪問spring-cloud-ribbon-client應用,在瀏覽器中使用此地址進行訪問:http://localhost:8030/ribbonClient/sayHello?say=helloWorld,可以發(fā)現(xiàn)訪問效果和直接訪問http://localhost:8020/sayHello?say=helloWorld的效果是一致的。
服務過濾就是一個filter,它可以在指定事件中(路由前,路由中,路由后等)執(zhí)行相關操作。Zuul中提供了一個filter接口,實現(xiàn)它即可。
@Component public class TokenFilter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); Object accessToken = request.getParameter("token"); if(accessToken == null) { ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is not exist!"); }catch (Exception e){} return null; } return null; } }
這段代碼表示,如果請求中沒有token信息,就會報錯“token is not exist!”。關注filterType字段,它代表過濾器的類型,具體如下:
pre:路由之前會調(diào)用
route:路由轉(zhuǎn)發(fā)的時候會調(diào)用
error:處理請求時發(fā)生錯誤時會調(diào)用
post:運行結(jié)束被調(diào)用
我們再次重啟一下spring-cloud-zuul,瀏覽器再次訪問http://localhost:8030/ribbonClient/sayHello?say=helloWorld,會發(fā)現(xiàn)如下錯誤提示:
加上token參數(shù)之后,即可正常訪問:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75846.html
摘要:負載均衡組件是一個負載均衡組件,它通常和配合使用。和配合,很容易做到負載均衡,將請求根據(jù)負載均衡策略分配到不同的服務實例中。和配合,在消費服務時能夠做到負載均衡。在默認的情況下,和相結(jié)合,能夠做到負載均衡智能路由。 2.2.1 簡介 Spring Cloud 是基于 Spring Boot 的。 Spring Boot 是由 Pivotal 團隊提供的全新 Web 框架, 它主要的特點...
摘要:分布式架構(gòu)五大核心套件服務發(fā)現(xiàn)云端服務發(fā)現(xiàn),一個基于的服務,用于定位服務,以實現(xiàn)云端中間層服務發(fā)現(xiàn)和故障轉(zhuǎn)移。 1 后端技術框架我們選擇Spring Cloud作為微服務的分布式架構(gòu):Spring Cloud vs Dubbo? 背景 Dubbo,是阿里巴巴服務化治理的核心框架,并被廣泛應用于阿里巴巴集團的各成員站點。Spring Cloud,是Spring Source的產(chǎn)物...
摘要:分布式架構(gòu)五大核心套件服務發(fā)現(xiàn)云端服務發(fā)現(xiàn),一個基于的服務,用于定位服務,以實現(xiàn)云端中間層服務發(fā)現(xiàn)和故障轉(zhuǎn)移。 1 后端技術框架我們選擇Spring Cloud作為微服務的分布式架構(gòu):Spring Cloud vs Dubbo? 背景 Dubbo,是阿里巴巴服務化治理的核心框架,并被廣泛應用于阿里巴巴集團的各成員站點。Spring Cloud,是Spring Source的產(chǎn)物...
摘要:服務注冊中心一個服務注冊中心,所有的服務都在注冊中心注冊,負載均衡也是通過在注冊中心注冊的服務來使用一定策略來實現(xiàn)。在客戶端實現(xiàn)了負載均衡。 文章參考于史上最簡單的 SpringCloud 教程 | 終章 Spring Cloud 是一個微服務框架,與 Spring Boot 結(jié)合,開發(fā)簡單。將一個大工程項目,分成多個小 web 服務工程,可以分別獨立擴展,又可以共同合作。 環(huán)境 ...
摘要:客戶端負載均衡器是一個客戶端負載均衡器,可以讓你對和客戶端的行為進行大量控制,已經(jīng)使用了,因此,如果你使用,此部分也適用。 客戶端負載均衡器:Ribbon Ribbon是一個客戶端負載均衡器,可以讓你對HTTP和TCP客戶端的行為進行大量控制,F(xiàn)eign已經(jīng)使用了Ribbon,因此,如果你使用@FeignClient,此部分也適用。 Ribbon中的一個核心概念是命名客戶端,每個負載均...
閱讀 1123·2021-09-22 16:04
閱讀 1502·2019-08-30 15:43
閱讀 1110·2019-08-29 14:01
閱讀 3445·2019-08-26 12:19
閱讀 3361·2019-08-26 12:15
閱讀 1454·2019-08-26 12:13
閱讀 3273·2019-08-23 17:00
閱讀 1491·2019-08-23 15:38