GoLang学习-Redis实现MQ功能
package main
import (
"fmt"
"github.com/go-redis/redis"
"log"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
pong, err := client.Ping().Result()
if err != nil {
log.Fatalf("Failed to connect to Redis: %v", err)
}
fmt.Println(pong)
// 创建一个消息队列的频道
messages := make(chan string)
// 创建一个信号通知,用于优雅地关闭程序
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// 开始监听消息队列
go func() {
for {
// 从Redis的列表中取出消息
val, err := client.BLPop(0, "myqueue").Result()
if err != nil {
log.Println("Error receiving message:", err)
continue
}
messages <- val[1]
}
}()
// 循环处理消息
for {
select {
case msg := <-messages:
// 处理消息
log.Printf("Received: %s\n", msg)
case sig := <-sigs:
log.Printf("Received signal: %s. Exiting...\n", sig)
return
}
}
}
这段代码使用Go语言和go-redis库实现了一个简单的Redis消息队列客户端。它连接到Redis服务器,监听名为"myqueue"的列表,并将接收到的消息打印出来。如果接收到系统信号(如SIGINT或SIGTERM),程序会优雅地关闭。这个例子展示了如何使用Go语言处理Redis消息队列,并且是构建实时系统时理解消息队列模式的一个很好的起点。
评论已关闭