中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

阿里云怎么做網(wǎng)站滄浪seo網(wǎng)站優(yōu)化軟件

阿里云怎么做網(wǎng)站,滄浪seo網(wǎng)站優(yōu)化軟件,建立網(wǎng)站的基本條件,湘潭做網(wǎng)站公司選擇封象網(wǎng)做網(wǎng)站公司目錄 一、Feign 簡介 1、RestTemplate 遠程調(diào)用中存在的問題 2、定義和使用 Feign 客戶端 3、Feign 自定義配置 4、Feign 性能優(yōu)化 5、Feign 最佳實踐 6、Feign 使用問題匯總 二、Gateway 網(wǎng)關簡介 1、搭建網(wǎng)關服務 2、路由斷言工廠 3、路由的過濾器配置 4、全局過…

目錄

一、Feign 簡介

1、RestTemplate 遠程調(diào)用中存在的問題

2、定義和使用 Feign 客戶端

3、Feign 自定義配置

4、Feign 性能優(yōu)化

5、Feign 最佳實踐

6、Feign 使用問題匯總

二、Gateway 網(wǎng)關簡介

1、搭建網(wǎng)關服務

2、路由斷言工廠

3、路由的過濾器配置

4、全局過濾器

5、過濾器鏈執(zhí)行順序

6、網(wǎng)關的 cors 跨域配置

7、Gateway 網(wǎng)關使用問題匯總


一、Feign 簡介

Feign?是 Netflix 開發(fā)的聲明式、模板化的 Http 客戶端,Feign 可以幫助我們更快捷、優(yōu)雅地調(diào)用Http API。

  • Feign 是在 Ribbon 的基礎上進行了一次改進,是一個使用起來更加方便的 HTTP 客戶端。
  • SpringCloud 對 Feign 進行了增強,使 Feign 支持了 Spring?MVC 注解,并整合了 Ribbon 和 Eureka,集成了服務發(fā)現(xiàn)和負載均衡,從而讓 Feign 的使用更加方便。

1、RestTemplate 遠程調(diào)用中存在的問題

該遠程調(diào)用的代碼有以下問題:

  • 代碼可讀性差,編程體驗不統(tǒng)一;
  • 參數(shù)復雜,URL 難以維護;

2、定義和使用 Feign 客戶端

在 SpringCloud 中,使用 Feign 非常簡單,創(chuàng)建一個 Interface,并在接口上添加一些注解,代碼就完成了。?

(1)引入依賴

  • 給需要遠程調(diào)用的模塊,引入 openfeign 起步依賴;

(2)添加 @EnableFeignClients 注解

  • 給需要遠程調(diào)用的啟動類,添加 @EnableFeignClients 注解;

(3)編寫 Feign 客戶端

  • 添加 @FeignClient 和 @GetMapping 注解;?

上述注解聲明了如下信息:

  • 服務名稱:user-service;
  • 請求方式:get;
  • 請求路徑:/user/{userId};
  • 請求參數(shù):String userId;
  • 返回值類型:User;

(4)OrderService 遠程調(diào)用過程

該遠程調(diào)用過程,就好像平常處理請求的逆過程:

  • OrderService 將 userId 傳遞給接口中的方法;
  • queryUserById 方法再將參數(shù)賦值給請求路徑中的占位符 {userId};
  • 然后再通過 get 請求向 UserController 發(fā)送請求;
  • 最終獲得 User 對象信息;

3、Feign 自定義配置

Spring 雖然幫我們做好了配置,但是也允許我們修改默認配置。

配置 Feign 日志有 2 種方式:

(1)application/bootstrap 配置文件方式

  • 注意:logging.level 屬性值需要改為 trace;?

(2)Java 代碼方式

4、Feign 性能優(yōu)化

Feign 底層客戶端實現(xiàn):

  • URLConnection:默認使用,java 原生 jdk,性能較差,不支持連接池;
  • Apache HttpClient:支持連接池;(推薦)
  • OKHttp:支持連接池;(推薦)

對 Feign 的性能優(yōu)化,最重要的一點就是對底層實現(xiàn)的改變。

因此優(yōu)化 Feign 的性能主要包括:

  • 使用連接池代替默認的 URLConnection;
  • 日志級別,最好用 basic 或 none;(因為開啟日志也需要占用較多資源)

下面以 HttpClient 為例子,說明性能優(yōu)化的步驟:

(1)引入依賴

  • httpClient 已經(jīng)被 Spring 管理好版本了,不需要指定版本;

(2)修改 application 配置文件

  • 將 feign.httpclient.enabled 的屬性值改為 true,表明底層使用 httpclient;

5、Feign 最佳實踐

最佳實踐是指,企業(yè)開發(fā)過程中,總結(jié)設計缺點,得出的一種相對比較好的使用方式。

通常會用到 2 種方式,各有利弊,按自己的需求使用:

  • 繼承:給消費者的 FeignClient 和提供者的 controller 定義統(tǒng)一的父接口,然后實現(xiàn)接口;
  • 比如 order 模塊要調(diào)用 user 模塊的服務,就定義 UserClient 接口,繼承 UserAPI;
  • 缺點:耦合度高;
  • 優(yōu)點:遵從了契約;

  • 抽取:將 FeignClient 抽取為獨立模塊,并且把接口有關的 POJO、默認的 Feign 配置都放到這個模塊中,提供給所有消費者使用;
  • 缺點:消費者可能會引入很多用不到的 api;
  • 優(yōu)點:耦合度低,層次分明;

我個人更喜歡第二種抽取的方式,下面使用這種方式做一個例子。

(1)創(chuàng)建 feign-api 模塊

  • 在 feign-api 模塊中引入 feign 的起步依賴;

  • 將消費者模塊中對提供者模塊所需的 Client、Pojo,以及 Config 類都移動到 feign-api 中;

(2)引入 feign-api 模塊

  • 在消費者 order-service 模塊中,引入 feign-api 模塊;

(3)消除報錯

  • 將 order-service 模塊內(nèi)原來依賴 pojo、config、client 的類,修改為 feign-api 模塊內(nèi)的類;

  • 由于 order-service 模塊的 application 啟動類無法掃描到 feign-api 模塊下的 Client 的 Bean 對象,因此會出現(xiàn)如下報錯:

  • 需要在 @EnableFeignClients 中加入 clients 屬性;

6、Feign 使用問題匯總

(1)Did you forget to include spring-cloud-starter-loadbalancer?

出錯原因:?

  • SpringCloud Feign 在 Hoxton.M2 RELEASED 版本之后不再使用?Ribbon,而是使用 spring-cloud-loadbalancer,所以在不引入 spring-cloud-loadbalancer 的情況下會報錯。

參考了很多解決方法,主要是要區(qū)別版本問題:

包含 RELEASE 關鍵字的版本中,只有下面這樣操作才能使用:

  • 首先排除 ribbon 的起步依賴,排除位置在消費者依賴的服務提供者的 dependency;
  • 添加 loadBalancer 依賴;

而在 2021 及更新版本中(也就是沒有 RELEASE 關鍵字的版本),只需要如下操作:

  • 引入 loadBalancer 依賴;
  • 不需要排除?ribbon 的起步依賴;

二、Gateway 網(wǎng)關簡介

為什么需要網(wǎng)關?

  • 如果沒有網(wǎng)關,那么所有人都可以訪問我們所有的服務,但是有很多服務其實是不能對外公開的。
  • 需要使用網(wǎng)關進行身份驗證,通過后才能訪問敏感服務。
  • 一切請求需要先通過網(wǎng)關,才能到微服務。

因此,網(wǎng)關有如下功能:

  • 身份認證和權限校驗;
  • 服務路由、負載均衡;(也就是能知道將請求送到哪個微服務)
  • 限制請求流量;

SpringCloud 提供了 2 個組件實現(xiàn)網(wǎng)關功能:

  • gateway;(新版本)
  • zuul;(早期版本)

Zuul 是基于 Servlet 的實現(xiàn),屬于阻塞式編程。

而 SpringCloudGateway 則是基于 Spring5 中提供的 WebFlux,屬于響應式編程的實現(xiàn),具備更好的性能。

1、搭建網(wǎng)關服務

(1)創(chuàng)建 gateway 模塊

  • 創(chuàng)建一個新的模塊專門用于網(wǎng)關:gateway-module,需要 SpringBoot 啟動類;
  • 引入 SpringCloudGateway 起步依賴;
  • 引入 Nacos 服務發(fā)現(xiàn)依賴;

(2)編寫路由配置以及 Nacos 地址

  • gateway 中的 routes 屬性之前的配置,目的是為了讓 gateway 將服務注冊到 nacos;
  • gateway 中的 routes 屬性之后的配置,指明了可以使用的 service 路由;
  • id:表示這個路由的名字,與其他屬性無關;
  • uri:表示路由目標地址,其中 lb 表示負載均衡,后面跟著服務的 name;
  • predicates:指定路由規(guī)則,符合規(guī)則就可以放行;

(3)測試網(wǎng)關功能

  • 啟動 gateway 的 application;
  • 發(fā)起請求:localhost:10010/order/queryOrderById/1;
  • 這個請求中,order-service 模塊會調(diào)用 user-service 的服務;

  • 訪問失敗,說明我們的網(wǎng)關起作用了,因為我們沒有為網(wǎng)關配置 order-service 的路由;

  • 添加對 order-service 的服務的路由后,就可以從 gateway 訪問 order 的服務了;

2、路由斷言工廠

路由斷言工廠 Route Predicate Factory,作用是:

  • 我們在配置文件中寫的 predicates 斷言規(guī)則只是字符串,這些字符串會被 Predicate Factory 讀取并解析為路由判斷的條件。
  • 每種規(guī)則都有各自的斷言工廠去解析,比如 Path 有 PathRoutePredicateFactory 斷言工廠;

下面以 After 舉一個例子:

(1)添加斷言規(guī)則 After

  • After 斷言規(guī)則,規(guī)定在這個時間之后,才能進行訪問;?

(2)訪問 order 的服務

  • 發(fā)送請求 /order/queryOrderById/1;
  • 理向情況應該是:無法訪問;

  • 修改斷言規(guī)則的時間為:2020-12-31,重啟 gateway 模塊;

  • 再次發(fā)起請求,就可以訪問了;

3、路由的過濾器配置

路由過濾器是:GatewayFilter。

  • GatewayFilter 是網(wǎng)關中提供的一種過濾器,可以對進入網(wǎng)關的請求微服務返回的響應做處理。

在這個過程中,過濾器就可對請求和響應做出各種各樣的處理,這樣往下游傳遞的數(shù)據(jù)中,就包含了修改后的信息。

具體有什么樣的操作,就要看使用哪個過濾器工廠:

下面我們以添加一個請求頭為例子:

(1)修改 application 配置文件

  • 給 routes 中的一個路由添加 filters 屬性;
  • filters 中添加:- AddRequestHeader=[key],[value];

(2)編寫 Controller,獲取請求頭信息

  • 既然在 filter 中設置了 header:orderStatus=001;
  • 那么請求傳遞到 Controller 后,一定可以獲取到這個頭信息;

  • 訪問 /order/queryOrderById/1,查看控制臺輸出;

(3)編寫默認過濾器 default-filter

如果我們想為所有的請求都添加 header 信息,也不需要給每一個路由都寫上 filters。

  • 只需要在 routes 同級下,添加 default-filter 屬性;
  • 給?default-filter 屬性添加:- AddRequestHeader=[key],[value] 等屬性值;

  • 訪問 /order/queryOrderById/1,查看控制臺輸出;

4、全局過濾器

全局過濾器是:GlobalFilter。

  • 全局過濾器的作用:處理一切進入網(wǎng)關的請求和微服務響應,與 GatewayFilter 的作用一樣,只是作用范圍不同。
  • 其中,GatewayFilter 通過配置定義,運行邏輯是固定的。(官方定義)
  • 而 GlobalFilter 的運行邏輯需要自己寫代碼實現(xiàn)。(自定義)

需求

定義全局過濾器,攔截請求,判斷請求的參數(shù)是否滿足下面條件:

  • 參數(shù)中是否有 authorization;
  • authorization 參數(shù)值是否為 admin;
  • 如果同時滿足則放行,否則攔截;

(1)定義實現(xiàn)類

  • 創(chuàng)建 AuthorFilter 實現(xiàn)類,實現(xiàn) GlobalFilter 接口;
  • exchange:請求上下文,里面可以獲取Request. Response等信息;
  • chain:用來把請求委托給下一個過濾器;
  • ?Nono<Void>:返回表示當前過濾器業(yè)務結(jié)束

(2)定義 filter 方法的運行邏輯

  • 添加 @Component;
  • 添加 @Order,方便多過濾器時指定順序;
  • 網(wǎng)關中采用的都是基于 WebFlux(響應式編程)的 API,因此使用上與 ServletAPI 不同;
@Order(-1)
@Component
public class AuthorFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.獲取請求參數(shù)ServerHttpRequest request = exchange.getRequest();MultiValueMap<String, String> params = request.getQueryParams();// 2.獲取請求參數(shù)中的 author 參數(shù)值String author = params.getFirst("author");// 3.判斷是否等于 adminif (author.equalsIgnoreCase("admin")) {// 放行return chain.filter(exchange);}// 4.不相等,獲取響應ServerHttpResponse response = exchange.getResponse();// 4.1.設置狀態(tài)碼,401表示未登錄response.setStatusCode(HttpStatus.UNAUTHORIZED);// 4.2.攔截請求return response.setComplete();}
}

(3)啟動 gateway 的 application

  • 訪問 /order/queryOrderById/1/author=admin111,先使用錯誤的 authon 參數(shù)值;
  • 發(fā)現(xiàn)返回了 401;

  • 訪問 /order/queryOrderById/1/author=admin,使用正確的 authon 參數(shù)值;
  • 可以正常訪問

5、過濾器鏈執(zhí)行順序

請求進入網(wǎng)關會碰到三類過濾器:當前路由的過濾器、DefaultFilter、GlobalFilter。

請求路由后,會將當前路由過濾器DefaultFilter、GlobalFilter,合并到一個過濾器鏈(集合)中,排序后依次執(zhí)行每個過濾器。

過濾器執(zhí)行順序:

  • 每一個過濾器都必須指定一個 int 類型的 order 值:order 值越小,優(yōu)先級越高,執(zhí)行順序越靠前;
  • GlobalFilter 通過實現(xiàn) Ordered 接口,或者添加 @Order 注解來指定 order 值,由我們自己指定;
  • 路由過濾器和 defaultFilter 的 order 由 Spring 官方指定,默認是按照聲明順序從 1 遞增;
  • 當過濾器的 order 值一樣時,會按照 defaultFilter > 路由過濾器 > GlobalFilter 的順序執(zhí)行;

6、網(wǎng)關的 cors 跨域配置

由于一些頁面可能需要從微服務中獲取某些數(shù)據(jù),此時需要發(fā)起 AJAX 請求,那么這就可能屬于跨域請求的范疇。(一般我們的 web 頁面端口都不會與微服務的相同,所以請求基本上都是跨域請求)

跨域請求不需要在微服務中處理,只需要在網(wǎng)關中處理即可。

跨域:域名不一致就是跨域,主要包括:

  • 域名不同:www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com;
  • 域名相同,端口不同:localhost:8080 和 localhost:8081

跨域問題的 2 個要素:

  • 瀏覽器、服務端:瀏覽器禁止請求向服務端發(fā)起跨域 ajax 請求,請求會被攔截;
  • 解決方案:CORS;

需求:

  • 使用 localhost:8090 發(fā)起請求,8090 發(fā)送的是 AJAX 的 GET 請求。
  • 8090 發(fā)起的 AJAX 請求需要通過網(wǎng)關,在 AJAX 的目標地址中要用 10010 端口;

(1)編寫 gateway 的配置文件

  • 各個屬性的作用都寫在注釋中了;

(2)端口 8090 的 AJAX 請求

  • 這里使用 JQuery 發(fā)起 AJAX 請求,傳遞參數(shù)為 author=admin;
  • 這里參數(shù)是必須傳遞的,因為發(fā)起的請求目標地址是要通過網(wǎng)關的,需要鑒權;
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript" src="JQuery-3.7.0.js"></script><script type="text/javascript">$(function() {$("#ajaxButton").click(function() {$.ajax({url:"http://localhost:10010/order/queryOrderById/1",data: {author : "admin"},type: "get",dataType: "json",success: function(data) {console.log(data);}});});});</script>
</head>
<body><a href="http://localhost:10010/order/queryOrderById/1?author=admin"> 發(fā)起普通GET請求 </a><input id="ajaxButton" type="button" value="發(fā)起 ajax 請求"/>
</body>
  • 發(fā)起請求,可以在控制臺看到返回的數(shù)據(jù);

  • 而如果我們用 <a> 來請求,是會跳轉(zhuǎn)到 10010 得頁面的,這就不算跨域請求了;

7、Gateway 網(wǎng)關使用問題匯總

(1)搭建網(wǎng)關服務時,報錯 503

這是因為在 Spring Cloud 2020 版本以后,默認移除了對 Netflix 的依賴,其中就包括 Ribbon,官方默認推薦使用 Spring Cloud Loadbalancer 正式替換 Ribbon,并成為了 Spring Cloud 負載均衡器的唯一實現(xiàn)。

Loadbalancer 依賴:

http://www.risenshineclean.com/news/43184.html

相關文章:

  • 學完html怎么做網(wǎng)站網(wǎng)絡營銷工程師培訓
  • 做電影網(wǎng)站程序哪個好360網(wǎng)站安全檢測
  • 誰知道深圳松崗天橋旁的網(wǎng)站建設營銷軟文200字
  • apache 創(chuàng)建網(wǎng)站網(wǎng)絡公司網(wǎng)站建設
  • 杭州的網(wǎng)站建設公司哪家好網(wǎng)絡營銷是以什么為基礎
  • 怎么做網(wǎng)站聊天視頻直播進入百度官網(wǎng)
  • 網(wǎng)站開發(fā)的測試計劃全網(wǎng)營銷軟件
  • 諸城 網(wǎng)站 建設企業(yè)應該如何進行網(wǎng)站推廣
  • 云南熱搜科技做網(wǎng)站不給源碼seo這個職位是干什么的
  • 企業(yè)網(wǎng)站制作模板免費下載做seo需要哪些知識
  • 如何自己建設電影網(wǎng)站制作網(wǎng)站需要什么
  • 網(wǎng)站手機訪問跳轉(zhuǎn)萬網(wǎng)官網(wǎng)域名注冊
  • 網(wǎng)站建設培訓南寧短視頻seo排名加盟
  • 軟件下載類型網(wǎng)站怎么做廣告推送平臺
  • 電子商務旅游網(wǎng)站建設策劃書廣州網(wǎng)絡營銷推廣公司
  • 問卷調(diào)查網(wǎng)站JAVA怎么做網(wǎng)站搭建步驟
  • 客戶開發(fā)軟件工具西安優(yōu)化seo
  • 昆明北京網(wǎng)站建設做網(wǎng)站的軟件叫什么
  • 婚紗網(wǎng)站建設 最開始百度百度
  • 個人公眾號做網(wǎng)站網(wǎng)店推廣培訓
  • 套網(wǎng)站模板軟件wix網(wǎng)站制作
  • 西寧網(wǎng)站建設的公司哪家好免費二級域名建站
  • 百度wap網(wǎng)站建設cdq百度指數(shù)
  • 惠州企業(yè)自助建站自己怎么創(chuàng)建網(wǎng)站
  • 臨沂購買模板建站網(wǎng)頁首頁設計圖片
  • 深圳教育網(wǎng)站設計公司鄭州seo顧問培訓
  • java做網(wǎng)站沒有php好嗎360瀏覽器網(wǎng)頁版入口
  • 網(wǎng)站查詢信息愛站網(wǎng)關鍵字挖掘
  • wordpress建設網(wǎng)站石家莊全網(wǎng)seo
  • 美國網(wǎng)站服務器營銷活動推廣策劃