美文网首页
go+redis实现消息队列发布与订阅

go+redis实现消息队列发布与订阅

作者: 小怪兽狂殴奥特曼 | 来源:发表于2019-04-24 17:55 被阅读0次

1.生产者随机发布消息,用rpush发布。
2.消费者用lpop订阅消费,一旦没有消息,随机休眠。
redis坐消息队列的缺点:没有持久化。一旦消息没有人消费,积累到一定程度后机会丢失

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

相关文章

  • go+redis实现消息队列发布与订阅

    1.生产者随机发布消息,用rpush发布。2.消费者用lpop订阅消费,一旦没有消息,随机休眠。redis坐消息队...

  • 最通俗易懂的Redis发布订阅及代码实战

    发布订阅简介 除了使用List实现简单的消息队列功能以外,Redis还提供了发布订阅的消息机制。在这种机制下,消息...

  • redis的高级特性

    发布订阅 特点 可以使用发布订阅来实现消息队列,但因为发出的消息不会被持久化,所以消费者只能收到从它开始订阅这个频...

  • Redis实现发布订阅模式

    简述 Redis可作为消息队列中间件使用,属于发布订阅模式 消息队列可以实现【系统解耦】、【异步处理】、【流量削峰...

  • Ⅲ.kafka

    一、定义 基于消息发布与订阅的消息队列中间件。 二、作用 解耦:实现生产端与消费端的解耦削峰:消息峰值时可做缓存,...

  • Python 实现RabbitMQ 发布订阅消息队列

    消息生产(发布)者: 消息消费(订阅)者

  • 发布-订阅者模式和事件监听器模式

    订阅者模式 订阅者和发布者模式,通常用于消息队列中。一般有两种形式来实现消息队列,一是使用生产者和消费者来实现,二...

  • 发布-订阅者模式和事件监听器模式

    订阅者模式 订阅者和发布者模式,通常用于消息队列中。一般有两种形式来实现消息队列,一是使用生产者和消费者来实现,二...

  • Redis消息队列(Message queues)

    Redis消息队列(Message queues) 场景 + 发布者订阅者模式:发布者生产消息放到队列里,多个监听...

  • redis实现MQTT模型订阅分布

    订阅发布其实也是属于一种特殊的消息队列Queue机制,与redis的普通队列list区别在于,如果订阅端存在多个消...

网友评论

      本文标题:go+redis实现消息队列发布与订阅

      本文链接:https://www.haomeiwen.com/subject/ybcngqtx.html