golang使用redis实现消息队列

golang使用redis实现消息队列(producer-consumer)

废话不多说,直接上代码,仅供参考
package main

import (
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"time"

	"github.com/gomodule/redigo/redis"
)

const RMQ string = "mqtest"

func producer() {
	redis_conn, err := redis.Dial("tcp", "127.0.0.1:6379")
	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")
	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
	fmt.Println(list)
	if list[1] == "pro" {
		go producer()
	} else if list[1] == "con" {
		go consumer()
	}
	for {
		time.Sleep(time.Duration(10000) * time.Second)
	}
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值