init_by_lua*
發生在master進程啟動階段。這里會對數據訪問層進行初始化,加載插件的代碼,構造路由規則表。
init_worker_by_lua*
發生在worker進程啟動階段。這里會開啟數據同步機制,執行每個插件的init_worker方法。
balancer.init() 讀取數據庫UPSTREAM表,初始化負載均衡器(給每個均衡器加載TARGET【讀取TARGET表】),給每個負載均衡器配備一個健康檢查器
構造完健康檢查器后,調用populate_healthchecker方法把負載均衡器中節點添加到健康檢查器中。
然后調用attach_healthchecker_to_balancer監聽健康檢查器的事件:healthchecker.events.healthy和healthchecker.events.unhealthy,並設置回調方法。
回調方法就是根據健康檢查器的事件類型,在負載均衡器中把后端節點標記為可用或不可用
set_by_lua*
處理請求第一個執行階段。這里可以做一些流程分支處理判斷變量初始化。kong沒有使用該階段。
rewrite_by_lua*
這里可以對請求做一些修改。kong在這里會把處理代理給插件的rewrite方法。
access_by_lua*
kong在這里對請求進行路由匹配,找到后端的upstream服務的節點。
規則的匹配在kong.access方法里面,調用router.exec方法進行匹配
balancer_by_lua*
kong在這里會把上一階段找到的服務節點設置給nginx的load balancer。如果設置了重試次數,此階段可能會被執行多次。
header_filter_by_lua*
這里可以對響應頭做一些處理。kong在這里會把處理代理給插件的header_filter方法。
body_filter_by_lua*
這里可以對響應體做一些處理。kong在這里會把處理代理給插件的body_filter方法。
log_by_lua*
kong在這里會通過插件異步記錄日志和一些metrics數據。
————————————————
版權聲明:本文為CSDN博主「aa1215018028」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/aa1215018028/article/details/81297724
