近幾年誕生了很多微服務框架,比如JAVA的Spring Cloud、Dubbo;Golang的GoKit和GoMicro以及NodeJs的Seneca。幾乎每種主流語言都有其對應的微服務框架。
創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網技術服務公司,擁有項目網站設計制作、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元青云譜做網站,已為上家服務,為青云譜各地企業(yè)和個人服務,聯(lián)系電話:13518219792
Go在微服務框架中有其獨特的優(yōu)勢,至于優(yōu)勢在哪,自行google。
1、GoKit框架
這是一個工具包的集合,可以幫助攻城獅構建強大、可靠和可維護的微服務。提供了用于實現(xiàn)系統(tǒng)監(jiān)控和彈性模式組件的庫,例如日志、跟蹤、限流、熔斷等。
基于這個框架的應用程序架構由三個主要的部分組成:
傳輸層:用于網絡通信,服務通常使用HTTP或者gRPC等網絡傳輸協(xié)議,或者使用NATS等發(fā)布訂閱系統(tǒng)相互通信。
接口層:是服務器和客戶端的基本構建塊。每個對外提供的接口方法都會定義為一個Endpoint,一遍在服務器和客戶端之間進行網絡通信,每個端點使用傳輸層通過HTTP或gRPC等具體通信模式對外提供服務
服務成:具體的業(yè)務邏輯實現(xiàn)
2、GoMicro框架
這是一個基于Go語言實現(xiàn)的插件化RPC微服務框架。提供了服務發(fā)現(xiàn)、負載均衡、同步傳輸、異步通信以及事件驅動等機制,嘗試簡化分布式系統(tǒng)之間的通信,讓開發(fā)者更專注于自身業(yè)務邏輯的開發(fā)。
GoMicro的設計哲學是可插拔的架構理念,提供了可快速構建系統(tǒng)的組件,并且可以根據自身的需求對GoMicro提供的默認實現(xiàn)進行定制。所有插件都可在倉庫github.com/micro/go-plugins 中找到。
1.在創(chuàng)建連接池之后,起一個 go routine,每隔一段 idleTime 發(fā)送一個 PING 到 Redis server。其中,idleTime 略小于 Redis server 的 timeout 配置。
2.連接池初始化部分代碼如下:
p, err := pool.New("tcp", u.Host, concurrency) errHndlr(err) go func() { for { p.Cmd("PING") time.Sleep(idelTime * time.Second) } }()
3.使用 redis 傳輸數(shù)據部分代碼如下:
func redisDo(p *pool.Pool, cmd string, args ...interface{}) (reply *redis.Resp, err error) { reply = p.Cmd(cmd, args...) if err = reply.Err; err != nil { if err != io.EOF { Fatal.Println("redis", cmd, args, "err is", err) } } return }
4.其中,Radix.v2 連接池內部進行了連接池內連接的獲取和放回,代碼如下:
// Cmd automatically gets one client from the pool, executes the given command // (returning its result), and puts the client back in the pool func (p *Pool) Cmd(cmd string, args ...interface{}) *redis.Resp { c, err := p.Get() if err != nil { return redis.NewResp(err) } defer p.Put(c) return c.Cmd(cmd, args...) }
這樣,就有了系統(tǒng) keep alive 的機制,不會出現(xiàn) time out 的連接了,從 redis 連接池里面取出的連接都是可用的連接了??此坪唵蔚拇a,卻完美的解決了連接池里面超時連接的問題。同時,就算 Redis server 重啟等情況,也能保證連接自動重連。
安裝:
go get -v -u github.com/rocket049/connpool
go get -v -u gitee.com/rocket049/connpool
rocket049/connpool 包是本人用go語言開發(fā)的,提供一個通用的TCP連接池,初始化參數(shù)包括最高連接數(shù)、超時秒數(shù)、連接函數(shù),放回連接池的連接被重新取出時,如果已經超時,將會自動重新連接;如果沒有超時,連接將被復用。
可調用的函數(shù):
調用示例: