成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

結合項目解答使用Go中間件遇到的問題:中間件的概念和應用

開發 項目管理
“中間件”它并沒有很嚴格的定義,但是普遍接受IDC的定義:中間件是一種獨立的系統軟件服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件位于客戶機服務器的操作系統之上,管理計算資源和網絡通信。

什么是中間件?

在服務端開發中,“中間件”是大家一定會聽到的名詞。

初學者聽起來覺得很高大上,覺得很難,其實“中間件”并不難,對我們學習Go語言來說,使用中間件也沒有太多心智挑戰。

“中間件”它并沒有很嚴格的定義,但是普遍接受IDC的定義:中間件是一種獨立的系統軟件服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件位于客戶機服務器的操作系統之上,管理計算資源和網絡通信。

比如:

我們今天要重點介紹的“GoFrame網絡請求控制中間件”是中間件的一種,它是基于GoFrame框架內部的一種中間件,也是我們這期內容的重點。

在我們WEB開發過程中,像常用的MySQL、Redis、RabbitMQ在系統架構角度也被稱為中間件。

從基礎架構、系統架構、程序架構等不同的觀點來看,中間件的概念是不一樣的。我們也不用過于糾結于這個名詞的具體解釋。

畢竟結合自己的需求,掌握如何使用中間件,遠比只搞清楚中間件的解釋要有意義的多。

更多介紹大家可以查看:中間件-計算機用語--百度百科[1],不作為我這期內容的重點。

GoFrame中間件/攔截器-基本介紹

GoFrame?提供了優雅的中間件請求控制方式,該方式也是主流的WebServer?提供的請求流程控制方式,基于中間件設計可以為WebServer提供更靈活強大的插件機制。

經典的中間件洋蔥模型:

圖片

中間件定義

中間件的定義和普通HTTP執行方法HandlerFunc?一樣,但是可以在Request?參數中使用Middleware屬性對象來控制請求流程。

我們拿一個跨域請求的中間件定義來示例說明一下:

func MiddlewareCORS(r *ghttp.Request) {
r.Response.CORSDefault()
r.Middleware.Next()
}

可以看到在該中間件中執行完成跨域請求處理的邏輯后,使用r.Middleware.Next()?方法進一步執行下一個流程;如果這個時候直接退出不調用r.Middleware.Next()方法的話,將會退出后續的執行流程(例如可以用于請求的鑒權處理)。

中間件類型

中間件的類型分為兩種:前置中間件和后置中間件。前置即在路由服務函數調用之前調用,后置即在其后調用。

前置中間件

其定義類似于:

func Middleware(r *ghttp.Request) {
// 中間件處理邏輯
r.Middleware.Next()
}

后置中間件

其定義類似于:

func Middleware(r *ghttp.Request) {
r.Middleware.Next()
// 中間件處理邏輯
}

按照中間件注冊方式劃分,又可分為:全局中間件、分組路由中間件。

全局中間件

func (s *Server) Use(handlers ...HandlerFunc)

全局中間件是可以獨立使用的請求攔截方法,通過路由規則的方式進行注冊,綁定到Server上,由于中間件需要執行請求攔截操作,因此往往是使用"模糊匹配"或者"命名匹配"規則。

全局中間件僅對動態請求攔截有效,無法攔截靜態文件請求。

分組路由中間件

func (g *RouterGroup) Middleware(handlers ...HandlerFunc) *RouterGroup

分組路由中注冊的中間件綁定到當前分組路由中的所有的服務請求上,當服務請求被執行前會調用到其綁定的中間件方法。

分組路由僅有一個Middleware的中間件注冊方法。分組路由中間件與全局中間件不同之處在于,分組路由中間件無法獨立使用,必須在分組路由注冊中使用,并且綁定到當前分組路由中所有的路由上作為路由方法的一部分。

執行優先級

全局中間件

由于全局中間件也是通過路由規則執行,那么也會存在執行優先級:

  • 首先,由于全局中間件是基于模糊路由匹配,因此當同一個路由匹配到多個中間件時,會按照路由的深度優先規則執行,具體請查看路由章節;
  • 其次,同一個路由規則下,會按照中間件的注冊先后順序執行,中間件的注冊方法也支持同時按照先后順序注冊多個中間件;
  • 最后,為避免優先級混淆和后續管理,建議將所有中間件放到同一個地方進行先后順序注冊來控制執行優先級;

這里的建議來參考于gRPC的攔截器設計,沒有過多的路由控制,僅在一個地方同一個方法統一注冊。往往越簡單,越容易理解,也便于長期維護。

分組路由中間件

分組路由中間件是綁定到分組路由上的服務方法,不存在路由規則匹配,因此只會按照注冊的先后順序執行。

示例

官方文檔為我們提供了比較詳細的示例,包括:

  • 允許跨域請求
  • 請求鑒權處理
  • 鑒權例外處理
  • 統一的錯誤處理
  • 自定義日志處理

本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。

轉載本文請聯系「 程序員升級打怪之旅」公眾號。

責任編輯:武曉燕 來源: 程序員升級打怪之旅
相關推薦

2015-12-21 14:56:12

Go語言Http網絡協議

2021-06-15 10:01:02

應用系統軟件

2021-10-06 19:03:35

Go中間件Middleware

2016-11-11 21:00:46

中間件

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開發CRUD

2022-07-14 08:17:59

中間件微服務開發

2013-12-12 10:55:21

2018-02-01 10:19:22

中間件服務器系統

2018-07-29 12:27:30

云中間件云計算API

2024-12-09 00:00:15

Gin框架中間件

2020-08-19 08:39:05

中間件前端設計模式

2015-02-07 21:52:45

PaaS中間件

2013-03-13 10:37:22

中間件Windows

2018-05-02 16:23:24

中間件RPC容器

2011-10-24 07:41:38

SOA中間件應用服務器

2022-05-10 09:24:44

中間件應用方案

2012-11-30 10:21:46

移動中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩视频在线播放 | 欧美综合色 | www国产成人免费观看视频,深夜成人网 | 日韩精品成人网 | 色www精品视频在线观看 | 91成人在线视频 | 亚洲精品99| 99久久影院 | 91精品免费 | 欧美日韩国产一区二区三区不卡 | 亚洲综合精品 | 999免费视频 | 亚洲二区视频 | 天堂一区| 免费一区| 91精品国产综合久久久久 | 亚洲小视频在线观看 | 国产精品欧美一区二区三区不卡 | 久草免费在线视频 | 97精品超碰一区二区三区 | 成人免费看片 | 久久亚洲综合 | 九九久久久 | 91久久国产综合久久 | 久久久久久久久久久久一区二区 | 99久久精品国产一区二区三区 | 91亚洲精华国产 | 蜜臀久久99精品久久久久久宅男 | 欧美自拍第一页 | www.99re| 久久在线视频 | 中文一区| 一区二区在线不卡 | 亚洲成人精品免费 | 成人免费视频网站在线看 | 国产色网站 | 国产精品欧美一区二区三区 | 秋霞电影院午夜伦 | 久久av网站 | 国产精品永久 | 精品91久久 |