【问题标题】:Redis Pub/Sub doesn't publish messageRedis Pub/Sub 不发布消息
【发布时间】:2016-09-01 09:43:14
【问题描述】:

我正在为 Redis 使用 StackExchange.Redis .NET 客户端(安装在 Windows 7 上)。 主机名 - 127.0.0.1,端口 - 6379

订阅者:

using (var connection = ConnectionMultiplexer.Connect(string.Format("{0}:{1},abortConnect=false,ConnectTimeout=10000", m_HostName, m_Port)))
{
   var sub = connection.GetSubscriber();
   sub.Subscribe("tasks", (channel, value) =>
   {
      // processing
   });
}

发布者:

using (var connection = ConnectionMultiplexer.Connect(string.Format("{0}:{1},abortConnect=false,ConnectTimeout=10000", m_HostName, m_Port)))
{
   var subscriber = connection.GetSubscriber();
   Logger.Debug(subscriber.IsConnected().ToString());
   subscriber.Publish("tasks", message);
}

在日志中我可以看到订阅者已连接,并且该行没有异常:

subscriber.Publish("tasks", message); 

但订阅者没有收到任何消息,并且 Redis 桌面管理器显示 DB 为空。

在redis cli中命令PUBSUB CHANNELS显示下一个结果,这意味着频道存在:

  1. “任务”
  2. “__Booksleeve_MasterChanged”

另外,我将字符串推送到数据库并成功:

var db = connection.GetDatabase();
db.StringSet("key","message");

有什么想法或建议吗?

【问题讨论】:

  • Publish 没有在数据库中设置任何东西 - 这是预期的(db 和 pub/sub 空间大多是不同的,除非您启用键空间通知)。您确定您在发布者之前就开始订阅了吗?如果发布者在订阅者注册之前发送数据,您将不会收到有关先前值的通知(redis 发布/订阅仅更新,没有初始图像)。

标签: c# .net redis stackexchange.redis


【解决方案1】:

除非您在 using 语句结束时阻止您的客户端,否则您的订阅者的连接将被释放。因此,您的客户端在 using 语句之后不会收到任何 pubsub 消息。

【讨论】: