You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
pubsub:=rdb.Subscribe(ctx, "mychannel1")
// Wait for confirmation that subscription is created before publishing anything._, err:=pubsub.Receive(ctx)
iferr!=nil {
panic(err)
}
// Go channel which receives messages.ch:=pubsub.Channel()
// Publish a message.err=rdb.Publish(ctx, "mychannel1", "hello").Err()
iferr!=nil {
panic(err)
}
time.AfterFunc(time.Second, func() {
// When pubsub is closed channel is closed too._=pubsub.Close()
})
// Consume messages.formsg:=rangech {
fmt.Println(msg.Channel, msg.Payload)
}
三. 代码实现
分步讲解下具体实现代码。
1. 连接redis
funcredisConnect() (rdb*redis.Client) {
var (
redisServerstringportstringpasswordstring
)
redisServer=os.Getenv("RedisUrl")
port=os.Getenv("RedisPort")
password=os.Getenv("RedisPass")
rdb=redis.NewClient(&redis.Options{
Addr: redisServer+":"+port,
Password: password,
DB: 0, // use default DB
})
return
}
一. 前言
在数据量较小的情况下,可以使用
Redis
来实现消息的发布与订阅,来代替Kafka
。Kafka
对于数据量大的场景下性能卓越,但是对于如此小场景时候,不仅运维成本提升,还用不上多少性能。不过使用
Redis
的另一个弊端是消息不能堆积,一旦消费者节点没有消费消息,消息将会丢失。因此需要评估当下场景来选择适合的架构。此处使用go-redis来实现
Redis
的发布与订阅。二. 官方文档
官方文档有较为完整的例子:
三. 代码实现
分步讲解下具体实现代码。
1. 连接redis
2. 发布消息
3. 订阅消息
四. 完整案例
此处分为一个发布节点和一个订阅节点来实现了简单的发布与订阅。
1. 消息发布节点
2. 消息订阅节点
五. 运行结果
1. 消息发布节点输出
2. 消息订阅节点输出
The text was updated successfully, but these errors were encountered: