日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

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

作者:升級(jí)打怪 ? 更新時(shí)間: 2022-11-09 編程語(yǔ)言

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

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

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)
    }
}

原文鏈接:https://www.cnblogs.com/lxz123/p/16702288.html

欄目分類
最近更新