怎么搭建golang框架-創(chuàng)新互聯(lián)

這個(gè)框架的目標(biāo)是作為一個(gè)通用的框架,我希望它大而全,在日后可以直接作為我其他項(xiàng)目的基礎(chǔ)模板,所以我還想繼續(xù)給他添加一些功能,就當(dāng)寫一些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ù)解決您的所有建站問題。

nsq

隊(duì)列有很多種,我選擇nsq。使用nsq需要知道以下幾個(gè)概念:

  1. nsqd:負(fù)責(zé)維護(hù)隊(duì)列的組件,接受消息排隊(duì)和投遞;
  2. nsqlookupd:管理nsq集群的組件;
  3. nsqadmin:nsq的web管理組件;
  4. topic:消息的集合。產(chǎn)生消息,需要指定該消息屬于哪個(gè)topic的;
  5. channel:隊(duì)列消息的副本。nsq消費(fèi)者與nsqd或者nsqlookupd建立一個(gè)channel,并監(jiān)聽channel中的消息,從而實(shí)現(xiàn)消費(fèi)。

了解了一些nsq的基礎(chǔ)概念之后,我們先把nsq環(huán)境搭建起來,這里我們還是用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'

瀏覽器訪問: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()

最后,我們寫個(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元起步,三天無理由+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://bm7419.com/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í)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)