最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go+redis實(shí)現(xiàn)消息隊(duì)列發(fā)布與訂閱的詳細(xì)過程

 更新時間:2022年09月17日 13:46:11   作者:升級打怪  
這篇文章主要介紹了go+redis實(shí)現(xiàn)消息隊(duì)列發(fā)布與訂閱,redis做消息隊(duì)列的缺點(diǎn):沒有持久化,一旦消息沒有人消費(fèi),積累到一定程度后就會丟失,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在做項(xiàng)目過程中,實(shí)現(xiàn)websocket得時候,不知道哪里寫的不太合適,客戶端消息收到一定程度,剩下的消息收不到,修改了緩沖區(qū)大小,還是沒有解決問題,后面因?yàn)轫?xiàng)目結(jié)束期比較緊張,沒有時間調(diào)試消息的時候,改用了redis隊(duì)列去做了消息得暫存,客戶端輪詢?nèi)ツ脤?yīng)的消息。

1.生產(chǎn)者隨機(jī)發(fā)布消息,用rpush發(fā)布。
2.消費(fèi)者用lpop訂閱消費(fèi),一旦沒有消息,隨機(jī)休眠。
redis做消息隊(duì)列的缺點(diǎn):沒有持久化。一旦消息沒有人消費(fèi),積累到一定程度后就會丟失

package main

import (
    "fmt"
    "time"
    "os"
    "strconv"
    "math/rand"
    "github.com/gomodule/redigo/redis"
)

const RMQ string = "mqtest"

func producer() {
    redis_conn, err := redis.Dial("tcp", "127.0.0.1:6379", redis.DialPassword("hdiot"))
    if err != nil {
        fmt.Println(err)
        return
    }
    
    defer redis_conn.Close()
    
    rand.Seed(time.Now().UnixNano())

    var i = 1

    for {
        _,err = redis_conn.Do("rpush", RMQ, strconv.Itoa(i))
        if(err!=nil) {
            fmt.Println("produce error")
            continue
        }
        fmt.Println("produce element:%d", i)
        time.Sleep(time.Duration(rand.Intn(10))*time.Second)
        i++
    }
}

func consumer() {
    redis_conn, err := redis.Dial("tcp", "127.0.0.1:6379", redis.DialPassword("hdiot"))
    if err != nil {
        fmt.Println(err)
        return
    }
    
    defer redis_conn.Close()

    rand.Seed(time.Now().UnixNano())

    for {
        ele,err := redis.String(redis_conn.Do("lpop", RMQ))
        if(err != nil) {
            fmt.Println("no msg.sleep now")
            time.Sleep(time.Duration(rand.Intn(10))*time.Second)
        } else {
            fmt.Println("cosume element:%s", ele)
        }
    }
}

func main() {
    list := os.Args
    if(list[1] == "pro") {
        go producer()
    } else if (list[1] == "con") {
        go consumer()
    }
    for {
        time.Sleep(time.Duration(10000)*time.Second)
    }
}

到此這篇關(guān)于go+redis實(shí)現(xiàn)消息隊(duì)列發(fā)布與訂閱的詳細(xì)過程的文章就介紹到這了,更多相關(guān)go redis消息隊(duì)列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang組件swagger生成接口文檔實(shí)踐示例

    golang組件swagger生成接口文檔實(shí)踐示例

    這篇文章主要為大家介紹了golang組件swagger生成接口文檔實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實(shí)例

    Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實(shí)例

    golang語言本身就是c的工具集,開發(fā)c的程序用到的大部分結(jié)構(gòu)體,內(nèi)存管理,攜程等,golang基本都有,下面這篇文章主要給大家介紹了關(guān)于Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Go語言標(biāo)準(zhǔn)錯誤error全面解析

    Go語言標(biāo)準(zhǔn)錯誤error全面解析

    Go語言中的錯誤處理是通過內(nèi)置的error接口來實(shí)現(xiàn)的,其中errorString和wrapError是兩種常見的錯誤類型實(shí)現(xiàn)方式,errorString通過errors.New()方法實(shí)現(xiàn),而wrapError則通過fmt.Errorf()方法實(shí)現(xiàn),支持錯誤的嵌套和解析
    2024-10-10
  • GO的range如何使用詳解

    GO的range如何使用詳解

    本文主要介紹了GO的range如何使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解Go 1.22 for循環(huán)的兩處重要更新

    詳解Go 1.22 for循環(huán)的兩處重要更新

    這篇文章主要詳細(xì)介紹了Go 1.22 for循環(huán)的兩處重要更新,Go 1.22 版本于 2024 年 2 月 6 日發(fā)布,引入了幾個重要的特性和改進(jìn),在語言層面上,這個版本對 for 循環(huán)進(jìn)行了兩處更新,本文將會對 for 循環(huán)的兩個更新進(jìn)行介紹,需要的朋友可以參考下
    2024-02-02
  • go語言區(qū)塊鏈實(shí)戰(zhàn)實(shí)現(xiàn)簡單的區(qū)塊與區(qū)塊鏈

    go語言區(qū)塊鏈實(shí)戰(zhàn)實(shí)現(xiàn)簡單的區(qū)塊與區(qū)塊鏈

    這篇文章主要為大家介紹了go語言區(qū)塊鏈的實(shí)戰(zhàn)學(xué)習(xí),來實(shí)現(xiàn)簡單的區(qū)塊與區(qū)塊鏈?zhǔn)纠^程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Go 切片導(dǎo)致內(nèi)存泄露的幾種原因

    Go 切片導(dǎo)致內(nèi)存泄露的幾種原因

    某些情況下,對一個已存在的切片或數(shù)組進(jìn)行切分操作可能會導(dǎo)致內(nèi)存泄漏,本文主要介紹了Go 切片導(dǎo)致內(nèi)存泄露的幾種原因,感興趣的可以了解一下
    2023-05-05
  • 詳解golang避免循環(huán)import問題(“import cycle not allowed”)

    詳解golang避免循環(huán)import問題(“import cycle not allowed”)

    這篇文章主要給大家介紹了關(guān)于golang中不允許循環(huán)import問題("import cycle not allowed")的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Golang?Mutex錯過會后悔的重要知識點(diǎn)分享

    Golang?Mutex錯過會后悔的重要知識點(diǎn)分享

    互斥鎖?Mutex?是并發(fā)控制的一個基本手段,是為了避免并發(fā)競爭建立的并發(fā)控制機(jī)制,本文主要為大家整理了一些Mutex的相關(guān)知識點(diǎn),希望對大家有所幫助
    2023-07-07
  • go語言for循環(huán)中嵌套defer的執(zhí)行順序

    go語言for循環(huán)中嵌套defer的執(zhí)行順序

    在Go語言中,defer語句用于延遲函數(shù)調(diào)用的執(zhí)行,本文主要介紹了go語言for循環(huán)中嵌套defer的執(zhí)行順序,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03

最新評論

金堂县| 九龙坡区| 巫溪县| 东乌珠穆沁旗| 行唐县| 肃宁县| 洪湖市| 横峰县| 修文县| 古交市| 冷水江市| 越西县| 阿克| 南陵县| 新竹市| 阿鲁科尔沁旗| 呼和浩特市| 会泽县| 定日县| 阿克| 丹棱县| 若羌县| 富蕴县| 门源| 和平县| 普宁市| 江阴市| 兴安盟| 抚顺县| 罗江县| 禄劝| 寻甸| 莱西市| 安吉县| 凤山市| 岐山县| 鄂州市| 涟水县| 龙海市| 汽车| 揭阳市|