這個(gè)框架的目標(biāo)是作為一個(gè)通用的框架,我希望它大而全,在日后可以直接作為我其他項(xiàng)目的基礎(chǔ)模板,所以我還想繼續(xù)給他添加一些功能,就當(dāng)寫(xiě)一些demo進(jìn)去吧。這篇文章,我將會(huì)添加一個(gè)隊(duì)列的功能。
創(chuàng)新互聯(lián)2013年至今,先為太康等服務(wù)建站,太康等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為太康企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。隊(duì)列有很多種,我選擇nsq。使用nsq需要知道以下幾個(gè)概念:
了解了一些nsq的基礎(chǔ)概念之后,我們先把nsq環(huán)境搭建起來(lái),這里我們還是用docker-compose好了,以下是nsq的docker-compose.yaml。
version: '3'
services:
nsqlookupd:
image: nsqio/nsq
command: /nsqlookupd
networks:
- nsq-network
hostname: nsqlookupd
ports:
- "4161:4161"
- "4160:4160"
nsqd:
image: nsqio/nsq
command: /nsqd --lookupd-tcp-address=nsqlookupd:4160 --broadcast-address=nsqd
depends_on:
- nsqlookupd
hostname: nsqd
networks:
- nsq-network
ports:
- "4151:4151"
- "4150:4150"
nsqadmin:
image: nsqio/nsq
command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
depends_on:
- nsqlookupd
hostname: nsqadmin
ports:
- "4171:4171"
networks:
- nsq-network
networks:
nsq-network:
driver: bridge
啟動(dòng)了nsq服務(wù)之后,我們簡(jiǎn)單地驗(yàn)證一下,發(fā)布一條消息到nsq中:
curl -d 'hello awesome' 'http://127.0.0.1:4151/pub?topic=awesome'
瀏覽器訪問(wèn):http://localhost:4171/,我們也可以看到有相應(yīng)的topic和產(chǎn)生
接著我們修改一下代碼,老規(guī)矩,先改配置:
"nsq_config":
"topic": "awesome"
"channel": "ch"
"nsqlookupd_addr": "127.0.0.1:4161"
type NsqConfig struct {
Topic string `yaml:"topic"`
Channel string `yaml:"channel"`
NsqLookupdAddr string `yaml:"nsqlookupd_addr"`
}
然后在mq.go中添加一個(gè)啟動(dòng)mq消費(fèi)者的函數(shù):
func StartMqServer() {
conf := nsq.NewConfig()
q, _ := nsq.NewConsumer(config.GetConfig().NsqConfig.Topic, config.GetConfig().NsqConfig.Channel, conf)
q.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
//do something when you receive a message
logger.GetLogger().Info("receive", zap.String(config.GetConfig().NsqConfig.Topic, string(message.Body)))
return nil
}))
err := q.ConnectToNSQLookupd(config.GetConfig().NsqConfig.NsqLookupdAddr)
if err != nil {
logger.GetLogger().Error("connect to nsqlookupd failed.", zap.Error(err))
os.Exit(-1)
}
}
同樣在入口文件,啟動(dòng)它:
go mq.StartMqServer()
最后,我們寫(xiě)個(gè)生產(chǎn)者,生成一條消息,測(cè)試一下:
func TestProducer(t *testing.T) {
config := nsq.NewConfig()
p, err := nsq.NewProducer("127.0.0.1:4150", config)
if err != nil {
log.Panic(err)
}
err = p.Publish("awesome", []byte("hello awesome"))
if err != nil {
log.Panic(err)
}
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享文章:怎么搭建golang框架-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://vcdvsql.cn/article20/cdgojo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)、面包屑導(dǎo)航、服務(wù)器托管、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容