golang+redis的延时队列

网址

代码结构很简单,简单代表着自由度很高,使用过程中出现问题也很好修改。

我很喜欢这样的代码,至少我看的懂,该有的都有。

go 复制代码
//package main
//
//import (
//	"context"
//	"fmt"
//	"log"
//	"time"
//
//	queue "github.com/cfanbo/delay-queue-redis"
//	"github.com/go-redis/redis/v8"
//)
//
//var redisClient *redis.Client
//
//type Msg struct {
//	MsgId   int    `json:"msg_id"`
//	MsgBody string `json:"body"`
//	UserId  int    `json:"uid"`
//}
//
//func handerFunc(msg queue.Message) {
//	fmt.Println("消费一条消息:=========")
//	fmt.Printf("%#v\n", msg)
//
//	// 转map
//	m := msg.Body.(map[string]interface{})
//	fmt.Println(m["msg_id"], m["body"], m["uid"])
//}
//
//func main() {
//	ctx, cancel := context.WithCancel(context.Background())
//	redisClient = redis.NewClient(&redis.Options{
//		Addr:     "localhost:6379",
//		Password: "", // no password set
//		DB:       0,  // use default DB
//	})
//
//	_, err := redisClient.Ping(ctx).Result()
//	if err != nil {
//		log.Fatal(err)
//	}
//
//	// 创建延时队列
//	q := queue.NewQueue(ctx, redisClient, queue.WithTopic("test-topic"), queue.WithHandler(handerFunc))
//	q.Start()
//
//	// 创建消息实体对象
//	ticker := time.NewTicker(time.Second * 1)
//	go func(ticker *time.Ticker) {
//		defer ticker.Stop()
//
//		for {
//			select {
//			case <-ticker.C:
//				message := Msg{100, "abc", 43}
//				msg := queue.NewMessage("", time.Now().Add(time.Second*8), message)
//
//				// 发布
//				_, err = q.Publish(msg)
//				if err != nil {
//					log.Fatal(err)
//				}
//				fmt.Println("发布成功一条消息")
//			}
//		}
//
//	}(ticker)
//
//	// 手动延时10秒后退出
//	time.Sleep(time.Second * 10)
//	cancel()
//}
相关推荐
黄暄15 分钟前
分布式锁优化:使用Lua脚本保证释放锁的原子性问题
java·redis·分布式·后端·junit·lua
stein_java26 分钟前
springMVC-9数据格式化
java·开发语言
李少兄29 分钟前
Java集合初始化:Lists.newArrayList vs new ArrayList()
java·开发语言·python
nbsaas-boot32 分钟前
小团队如何落地 Scrum 模型:从 0 到 1 的实战指南
开发语言·架构
love530love34 分钟前
【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
开发语言·人工智能·windows·笔记·python·numpy
黄雪超39 分钟前
JVM——从JIT到AOT:JVM编译器的云原生演进之路
java·开发语言·jvm
yunvwugua__1 小时前
Python训练营打卡 Day43
开发语言·python
运维老曾1 小时前
Redis-6.2.9 Sentinel 哨兵配置
redis·sentinel
g5zhu58961 小时前
neo4j 5.19.0两种基于向量进行相似度查询的方式
开发语言·python
struggle20251 小时前
LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 C&C 的 RedTeam 框架
c语言·开发语言·python·html·powershell