go语言+redis实现简单消息队列

package RedisClient

import (
	"fmt"
	"github.com/go-redis/redis"
	"math/rand"
	"time"
)

// 队列的key
var queueKey = "queue:message"
var rdb *redis.Client

func NewClient() {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "",
	})
	pong, err := rdb.Ping().Result()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(pong, "redis success.")
}

// 使用list生产消息

func ProducerMessageList() {
	rand.Seed(time.Now().UnixNano())
	fmt.Println("开启生产者。。。。")

	for i := 0; i < 10; i++ {
		score := time.Now().Unix()
		fmt.Println("正在生产一条消息...", score, i)
		_, err := rdb.LPush(queueKey, i).Result()
		if err != nil {
			fmt.Println(err)
		}
		time.Sleep(time.Duration(rand.Intn(3)) * time.Second)
	}
}

// 使用list格式接收消息

func ConsumerMessageList() {
	for {
		// 设置一个5秒的超时时间
		value, err := rdb.BRPop(5*time.Second, queueKey).Result()
		if err == redis.Nil {
			// 查询不到数据,跳过
			time.Sleep(1 * time.Second)
			continue
		}
		if err != nil {
			// 查询出错,跳过
			time.Sleep(1 * time.Second)
			continue
		}
		fmt.Println("接收到数据:", value, "当前时间是:", time.Now().Unix())
		time.Sleep(time.Second)

	}
}