HDT3213 / delayqueue

Simple, reliable, installation-free distributed delayed delivery message queue in Go. 简单、可靠、免安装的分布式延时投递消息队列
https://www.cnblogs.com/Finley/p/16400287.html
Apache License 2.0
303 stars 54 forks source link

consume error: pending2ReadyScript failed: ERR Cross-slot queries are not supported for this command #5

Closed lz-freedom closed 2 years ago

lz-freedom commented 2 years ago

当集群模式下会报这个错误

HDT3213 commented 2 years ago

稍后我给 redis 的 key 加个 hashtag 就可以了

HDT3213 commented 2 years ago

您是用的官方的 redis cluster 还是Codis/阿里云/腾讯云的代理式集群,不需要 ClusterClient 的那种?

lz-freedom commented 2 years ago

不需要ClusterClient的那种

lz-freedom commented 2 years ago

redis.NewClient(opt)

HDT3213 commented 2 years ago

嗯, 我在 NewQueue 的时候加个选项就可以了。不过要改 redis 里的 key, 旧数据是保不住了

HDT3213 commented 2 years ago

方便加一下我微信吗? HDT3213

HDT3213 commented 2 years ago

试一下这个版本:

go get github.com/hdt3213/delayqueue@89b3abbb8d498f92643a65677d87d0a30b9ec07b

NewQueue 的时候添加一个选项UseHashTagKey :

NewQueue("test", redisCli, cb, UseHashTagKey())

这样所有 key 都会分配到同一个 hash slot 里面

lz-freedom commented 2 years ago

UseHashTagKey()还是一样的问题,hashtag我也尝试添加了,但是没神什么作用

lz-freedom commented 2 years ago
image
HDT3213 commented 2 years ago

您把 queueName 中的花括号去掉试试

HDT3213 commented 2 years ago

以及您使用的是什么样的集群呢?我搭建一下试试

lz-freedom commented 2 years ago

是proxy的问题,自建的6节点集群,然后使用redis-cluster-proxy做的统一出口 启动命令/usr/local/bin/redis-cluster-proxy --enable-cross-slot 172.19.123.38 6301 172.19.123.38 6302 172.19.123.38 6303 如果单独链接其中一个例如(172.19.123.38 6301 )加上hashtag是正常能使用的

image image
HDT3213 commented 2 years ago

那我把 hash tag 的版本 release 一下

HDT3213 commented 2 years ago

published in v1.0.3