go語言web框架beego安裝(go mod方式)_不忘初心,方得始終-CSDN博客
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的奈曼網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
重要:將bee命令放到GOROOT/bin目錄下,這步很關(guān)鍵
cp bee /usr/local/go/bin/
注:或者可以將GOPATH/bin設(shè)置為環(huán)境變量
echo ’export PATH=" PATH"' ~/.bashrc
source ~/.bashrc
router路由下方法名要大寫,訪問權(quán)限
wq保存
生效環(huán)境變量: source /etc/profile
go build -o abc.exe可指定編譯后的文件名
Golang常用環(huán)境變量說明與設(shè)置詳解
環(huán)境變量GOBIN表示我們開發(fā)程序編譯后二進制命令的安裝目錄。
當(dāng)我們使用go install命令編譯和打包應(yīng)用程序時,該命令會將編譯后二進制程序打包GOBIN目錄,一般我們將GOBIN設(shè)置為GOPATH/bin目錄。
export GOBIN=$GOPATH/bin
Go get包管理mod
windows下默認項目路徑在go安裝目錄的src下(beego)
Micro的api就是api網(wǎng)關(guān)
API參考了 API網(wǎng)關(guān)模式 為服務(wù)提供了一個單一的公共入口?;诜?wù)發(fā)現(xiàn),使得micro api可以提供具備http及動態(tài)路由的服務(wù)。
Micro的API基于HTTP協(xié)議。請求的API接口通過HTTP協(xié)議訪問,并且路由是基于服務(wù)發(fā)現(xiàn)機制向下轉(zhuǎn)發(fā)的。 Micro API在 go-micro 之上開發(fā),所以它集成了服務(wù)發(fā)現(xiàn)、負載均衡、編碼及基于RPC的通信。
因為micro api內(nèi)部使用了go-micro,所以它自身也是可插拔的。 參考 go-plugins 了解對gRPC、kubernetes、etcd、nats、及rabbitmq等支持。另外,api也使用了 go-api ,這樣,接口handler也是可以配置的。
ACME( Automatic Certificate Management Environment)是由 Let’s Encrypt 制定的安全協(xié)議。
可以選擇是否配置白名單
API服務(wù)支持TLS證書
API使用帶分隔符的命名空間來在邏輯上區(qū)分后臺服務(wù)及公開的服務(wù)。命名空間及http請求路徑會用于解析服務(wù)名與方法,比如 GET /foo HTTP/1.1 會被路由到 go.micro.api.foo 服務(wù)上。
API默認的命名空間是 go.micro.api ,當(dāng)然,也可以修改:
我們演示一個3層的服務(wù)架構(gòu):
完整示例可以參考: examples/greeter
先決條件:我們使用Consul作為默認的服務(wù)發(fā)現(xiàn),所以請先確定它已經(jīng)安裝好了,并且已經(jīng)運行,比如執(zhí)行 consul agent -dev 這樣子方式運行。
向micro api發(fā)起http請求
HTTP請求的路徑 /greeter/say/hello 會被路由到服務(wù) go.micro.api.greeter 的方法 Say.Hello 上。
繞開api服務(wù)并且直接通過rpc調(diào)用:
使用JSON的方式執(zhí)行同一請求:
micro api提供下面類型的http api接口
請看下面的例子
Handler負責(zé)持有并管理HTTP請求路由。
默認的handler使用從注冊中心獲取的端口元數(shù)據(jù)來決定指向服務(wù)的路由,如果路由不匹配,就會回退到使用”rpc” hander。在注冊時,可以通過 go-api 來配置路由。
API有如下方法可以配置請求handler:
通過 /rpc 入口可以繞開handler處理器。
API處理器接收任何的HTTP請求,并且向前轉(zhuǎn)發(fā)指定格式的RPC請求。
RPC處理器接收json或protobuf格式的HTTP POST請求,然后向前轉(zhuǎn)成RPC請求。
代理Handler其實是內(nèi)置在服務(wù)發(fā)現(xiàn)中的反向代理服務(wù)。
事件處理器使用go-micro的broker代理接收http請求并把請求作為消息傳到消息總線上。
Web處理器是,它是內(nèi)置在服務(wù)發(fā)現(xiàn)中的HTTP反向代理服務(wù),支持web socket。
/rpc 端點允許繞過主handler,然后與任何服務(wù)直接會話。
示例:
更多信息查看可運行的示例: github.com/micro/examples/api
解析器,Micro使用命名空間與HTTP請求路徑來動態(tài)路由到具體的服務(wù)。
API命名的空間是 go.micro.api ??梢酝ㄟ^指令 --namespace 或者環(huán)境變量 MICRO_NAMESPACE= 設(shè)置命名空間。
下面說一下解析器是如何使用的:
RPC解析器示例中的RPC服務(wù)有名稱與方法,分別是 go.micro.api.greeter , Greeter.Hello 。
URL會被解析成以下幾部分:
帶版本號的API URL也可以很容易定位到具體的服務(wù):
代理解析器只處理服務(wù)名,所以處理方案和RPC解析器有點不太一樣。
URL會被解析成以下幾部分:
micro proxy 其實就是客戶端的代理。
如果服務(wù)運行環(huán)境不能直接訪問,那么就需要通過代理來訪問,micro proxy就是來干這事的,它提供http api,這個api可以把客戶端的請求轉(zhuǎn)向那些沒有直接暴露給客戶端的服務(wù)。
代理基于go-micro開發(fā),也就是說它是依賴服務(wù)發(fā)現(xiàn)的。
安裝Consul
Micro代理默認是運行在8081端口下。
啟動代理:
服務(wù)默認使用ACME安全協(xié)議
可以選擇性配置主機白名單
命令行如果要指定代理,可以像下面這樣設(shè)置:
首先保證 Git 和 Go 已經(jīng)安裝成功??梢詤⒖?
其次配置好 GOPATH 環(huán)境變量。
Go Micro 是基于 Go 語言用于開發(fā)的微服務(wù)的 RPC 框架,它是 Micro 的基礎(chǔ),執(zhí)行下面當(dāng)命令安裝:
核心是 gogetgithub.com/micro/go-micro,但一些包需預(yù)先安裝好(由于網(wǎng)絡(luò)或映射原因)。
Protocol Buffers (a.k.a., protobuf) 是 Google 的數(shù)據(jù)交換格式。 在 下載安裝源碼,編譯安裝。本文選擇的 cpp 的版本:
還需要安裝 Go 對 Protobuf 的支持,和 Protobuf 代碼生成器:
Micro 用于提供構(gòu)建微服務(wù)的關(guān)鍵元素集合。
時間會比較久。
至此一個基本的 Go Micro 環(huán)境就安裝完畢。
官方網(wǎng)站給了一個測試用例,我們先體驗一下:
先安裝官方測試案例 srv:
安裝完成后,會在 $GOPATH/bin 下生成 srv 執(zhí)行文件,啟動他。本文已經(jīng)將 $GOPATH/bin 設(shè)置到環(huán)境變量 path 中。
通過命令查看當(dāng)前運行的微服務(wù)實例:
調(diào)用微服務(wù):
得到以上結(jié)果,表示 Go Micro 的相關(guān)產(chǎn)品安裝完畢!
通過beego快速創(chuàng)建一個Restful風(fēng)格API項目及API文檔自動化:
Go 語言構(gòu)建 RESTful Web 服務(wù):
Golang中使用 JWT認證來 保障Restful JSON API的安全(英文):
polaris: 一個用go實現(xiàn)的支持restful的web框架:
關(guān)于RESTFUL API 安全認證方式的一些總結(jié):
有沒有人用golang實現(xiàn)過restful框架的實例:
Micro 一個用Go語言實現(xiàn)的微服務(wù)框架:
基于微服務(wù)庫的可插拔RPC go-micro:
golang適合做web開發(fā)嗎?:
a-survey-of-5-go-web-frameworks:
Ozzo Framework:
avelino/awesome-go:
Beego Framework:
golang其實不適合做web開發(fā):
Go語言現(xiàn)有Web開發(fā)框架:
使用Golang快速構(gòu)建WEB應(yīng)用:
Martini 極好的 Go WEB 框架:
golang 有哪些比較穩(wěn)定的 web 開發(fā)框架?:
一、服務(wù)注冊中心的由來
假如沒有服務(wù)注冊中心,我們會干些什么事情呢?
在傳統(tǒng)行業(yè)的項目架構(gòu)中以下的方案最為常見了:
這種架構(gòu)開發(fā)、部署都是最簡單的,一般適用于中小企業(yè)訪問量并不是太多的情況下,各個系統(tǒng)服務(wù)一臺機器就搞定了。系統(tǒng)之間的調(diào)用也是拿到對方的IP+PORT直接連接。
接下來可能因為應(yīng)用B開始訪問量大了,單臺機器已經(jīng)不能滿足我們的需求,于是一些反向代理工具應(yīng)運而出,其中比較常見的有Apache、Nigix,架構(gòu)演變?yōu)椋?/p>
相比之前的應(yīng)用B的單臺機器訪問,這種nginx代理的方式減輕了服務(wù)器的壓力,但是可能會出現(xiàn)Nginx掛了,那么整個服務(wù)也不可用,于是又來了這么一套架構(gòu):
這樣看方案算是完美了吧。然后事情并不是想象的那么一帆風(fēng)順,這還只是應(yīng)用A調(diào)用一個應(yīng)用B,如果應(yīng)用A調(diào)用的可能是應(yīng)用B、C、D、E...,這種完全就不知道他后面到底還想干嘛,這種架構(gòu)看似可以,但是絕對會累死運維的(nginx的配置將會非?;靵y,直接導(dǎo)致運維不干了)。
服務(wù)注冊中心干些什么事情呢?
上面提到的那種靠人力(主要是運維干的事情)比較繁瑣,還不好維護,有這么幾點不方便:應(yīng)用服務(wù)的地址變了、雙十一搞活動服務(wù)器新增等等。那么我們可以有這么的一種架構(gòu):
服務(wù)注冊中心主要是維護各個應(yīng)用服務(wù)的ip+port列表,并保持與各應(yīng)用服務(wù)的通訊,在一定時間間隔內(nèi)進行心跳檢測,如果心跳不能到達則對服務(wù)IP列表進行剔除,并同時通知給其它應(yīng)用服務(wù)進行更新。同樣要是有新增的服務(wù)進來,應(yīng)用服務(wù)會向注冊中心進行注冊,服務(wù)注冊中心將通知給其它應(yīng)用進行更新。每個應(yīng)用都有需要調(diào)用對應(yīng)應(yīng)用服務(wù)的地址列表,這樣在進行調(diào)用時只要處理客戶負載雜均衡即可。
二、微服務(wù)注冊中心
1.Zookeeper
ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護、域名服務(wù)、分布式同步、組服務(wù)等。
上面的話直接摘抄百度百科的內(nèi)容,國內(nèi)很多公司做分布式開發(fā)最初的選型大部分都是采用dubbo框架。dubbo框架注冊中心主要使用zookeeper。zookeeper服務(wù)端與客戶端的底層通訊為netty。zookeeper采用CAP理論中的CP,一般集群部署最少需要3臺機器。
2.Euraka
先來看一下euraka的架構(gòu)圖:
Register:服務(wù)注冊
當(dāng)Eureka客戶端向Eureka Server注冊時,它提供自身的元數(shù)據(jù),比如IP地址、端口,運行狀況指示符URL,主頁等。
Renew:服務(wù)續(xù)約
Eureka客戶會每隔30秒發(fā)送一次心跳來續(xù)約。 通過續(xù)約來告知Eureka Server該Eureka客戶仍然存在,沒有出現(xiàn)問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續(xù)約,它會將實例從其注冊表中刪除。 建議不要更改續(xù)約間隔。
Fetch Registries:獲取注冊列表信息
Eureka客戶端從服務(wù)器獲取注冊表信息,并將其緩存在本地。客戶端會使用該信息查找其他服務(wù),從而進行遠程調(diào)用。該注冊列表信息定期(每30秒鐘)更新一次。每次返回注冊列表信息可能與Eureka客戶端的緩存信息不同, Eureka客戶端自動處理。如果由于某種原因?qū)е伦粤斜硇畔⒉荒芗皶r匹配,Eureka客戶端則會重新獲取整個注冊表信息。 Eureka服務(wù)器緩存注冊列表信息,整個注冊表以及每個應(yīng)用程序的信息進行了壓縮,壓縮內(nèi)容和沒有壓縮的內(nèi)容完全相同。Eureka客戶端和Eureka 服務(wù)器可以使用JSON / XML格式進行通訊。在默認的情況下Eureka客戶端使用壓縮JSON格式來獲取注冊列表的信息。
Cancel:服務(wù)下線
Eureka客戶端在程序關(guān)閉時向Eureka服務(wù)器發(fā)送取消請求。 發(fā)送請求后,該客戶端實例信息將從服務(wù)器的實例注冊表中刪除。該下線請求不會自動完成,它需要調(diào)用以下內(nèi)容:
DiscoveryManager.getInstance().shutdownComponent();
Eviction 服務(wù)剔除
在默認的情況下,當(dāng)Eureka客戶端連續(xù)90秒沒有向Eureka服務(wù)器發(fā)送服務(wù)續(xù)約,即心跳,Eureka服務(wù)器會將該服務(wù)實例從服務(wù)注冊列表刪除,即服務(wù)剔除。
自我保護機制:
既然Eureka Server會定時剔除超時沒有續(xù)約的服務(wù),那就有可能出現(xiàn)一種場景,網(wǎng)絡(luò)一段時間內(nèi)發(fā)生了 異常,所有的服務(wù)都沒能夠進行續(xù)約,Eureka Server就把所有的服務(wù)都剔除了,這樣顯然不太合理。所以,就有了 自我保護機制,當(dāng)短時間內(nèi),統(tǒng)計續(xù)約失敗的比例,如果達到一定閾值,則會觸發(fā)自我保護的機制,在該機制下, Eureka Server不會剔除任何的微服務(wù),等到正常后,再退出自我保護機制。自我保護開關(guān)(eureka.server.enableself-preservation: false)
3.Consul
consul推薦的架構(gòu)圖:
Consul不像Euraka的部署那么簡單,他是go語言開發(fā)的,需要運維單獨部署,有提供java的客戶端連接,采用的是CAP的CP。
4.Nacos
Euraka是Spring Cloud Netflix早期版本中推薦使用的,后來euraka1.0版本不再維護,euraka2.0已經(jīng)閉源,導(dǎo)致很多新項目基于Spring Cloud Netflix 開發(fā)的選型變遷為Consul.
Nacos是阿里開源的服務(wù)注冊中心,它可以與spring cloud aliaba集成使用。
Nacos的官方介紹:
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置管理、服務(wù)及流量管理。
Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu)(例如微服務(wù)范式、云原生范式)的服務(wù)基礎(chǔ)設(shè)施。
Nacos 地圖
Nacos 生態(tài)圖
如 Nacos 全景圖所示,Nacos 無縫支持一些主流的開源生態(tài),例如
Spring Cloud
Apache Dubbo and Dubbo Mesh TODO
Kubernetes and CNCF TODO
三、服務(wù)注冊與發(fā)現(xiàn)技術(shù)選型
以下是來自網(wǎng)上的一個分享:
除了上述的幾種以外,筆者更推薦使用Nacos作為服務(wù)注冊中心。
推薦理由:
Nacos服務(wù)注冊表結(jié)構(gòu)Mapnamespace, Mapgroup::serviceName, Service采用多層次Map結(jié)構(gòu),控制的顆粒度更細,支持金絲雀模式發(fā)布,心跳同步機制也更快速,服務(wù)更新更及時。