原文鏈接:https://blog.fengjx.com/openr...html
OpenResty(也稱爲 ngx_openresty)是一個全功能的 Web 應用服務器。它打包了標準的 Nginx 核心,不少的經常使用的第三方模塊,以及它們的大多數依賴項。nginx
經過揉和衆多設計良好的 Nginx 模塊,OpenResty 有效地把 Nginx 服務器轉變爲一個強大的 Web 應用服務器,基於它開發人員可使用 Lua 編程語言對 Nginx 核心以及現有的各類 Nginx C 模塊進行腳本編程,構建出能夠處理一萬以上併發請求的極端高性能的 Web 應用。git
ngx_openresty 目前有兩大應用目標:github
引用自:OpenResty最佳實踐web
目前已經有大佬寫了很完整的教程,沒有必要重複造輪子了,我以爲這兩個是最好的。更多openresty相關資料能夠看這裏https://blog.fengjx.com/aweso...編程
服務啓動時,將本身的節點信息註冊到etcd,包括:服務名稱、ip、端口後端
網關服務從etcd監聽服務節點信息變動,並保存到緩存中,從客戶端請求的url中提取服務名稱,經過服務名稱查找節點信息,將請求轉發到後端服務api
關於etcd的使用,這裏再也不闡述
url規範緩存
/open/api/service_name/**
,後端服務路由:/open/api/**
/inner/api/service_name/**
,後端服務路由:/**
例如/open/api/user/fav
會轉發到user服務的/open/api/fav
接口;/inner/api/user/info
會轉發到user服務的/info
接口。經過url規範咱們就能很輕易的作api鑑權,而不須要將對外api和對內api部署成2個服務(固然也要考慮實際狀況,是否符合實際項目要求)。bash
github: https://github.com/tech-micro... (tag v0.1)
初始化項目配置
初始化服務發現組件,監聽服務節點變動信息
rewrite_by_lua_file 'lua/rewrite.lua'
經過服務發現組件查詢服務節點信息
經過查詢到的節點信息,輪訓其中一個節點,將請求轉發到後端服務
模擬用戶服務
模擬登錄服務
安裝openresty: http://openresty.org/cn/insta...
啓動服務
git clone git@github.com:tech-microworld/ws-cloud-gateway.git cd ws-cloud-gateway # 切換到 tag v0.1 git checkout -b v0.1 v0.1 # -g 'daemon off;是在前臺運行,若是想後臺運行能夠去掉 openresty -p `pwd` -c conf/nginx.conf -g 'daemon off;'
向etcd註冊節點信息,固然實際狀況是在服務啓動的時候自動註冊的,這裏爲了測試,手動模擬的服務註冊過程
# 註冊user服務 etcdctl put /micros/service/user/127.0.0.1:1024 1 etcdctl put /micros/service/user/127.0.0.1:1025 1 # 註冊auth服務 etcdctl put /micros/service/auth/127.0.0.1:1026 1 etcdctl put /micros/service/auth/127.0.0.1:1027 1
發送http請求
# 測試auth服務 curl http://localhost:10000/open/api/auth/login curl http://localhost:10000/inner/api/auth/has-login # 測試user服務 curl http://localhost:10000/inner/api/user/fav curl http://localhost:10000/inner/api/user/info