我有一个 Redis Connection Multiplexer 类,我将其注入到构造函数中的两个类中。
public class CLASS_1 {
IConnectionMultiplexer _redis;
public CLASS_1(IConnectionMultiplexer redis){
_redis = redis
subscribeToChannel()
}
public subscribeToChannel(){
ISubscriber redisSubscriber = null;
redisSubscriber = _redis.GetSubscriber();
redisSubscriber.Subscribe("REDIS_CHANNEL",(channel, message) => {
// alway listen to the messages and perform the task
}
}
~ CLASS_1(){
redisSubscriber.Unsubscribe("REDIS_CHANNEL")
}
}
public class CLASS_2 {
IConnectionMultiplexer _redis;
public CLASS_2(IConnectionMultiplexer redis){
_redis = redis
}
public async executeCommand(){
ISubscriber redisSubscriber = null;
redisSubscriber = _redis.GetSubscriber();
/// perform a task
await redisSubscriber.SubscribeAsync("REDIS_CHANNEL", callBack);
/// perform a task
if (redisSubscriber != null) {
redisSubscriber.UnsubscribeAll()
// even if I do redisSubscriber.Unsubscribe("REDIS_CHANNEL") it still affects the other subscriptions
}
}
}
CLASS_1
是一个单例类,我正在订阅CLASS_1
中的Redis频道。这意味着它只订阅该频道一次。该类始终监听通道消息并在收到任何消息时执行一些任务。唯一一次 CLASS_1
取消订阅频道是在析构函数中。
现在,
CLASS_2
不是一个单例类,并且应用程序中很少有它的实例。 CLASS_2
还订阅了 CLASS_1
中订阅的同一频道。但是 CLASS_2
也会在程序运行时的某个时刻取消订阅。
现在,当
CLASS_2
取消订阅时,就会出现问题,它也会取消 CLASS_1
中的活动订阅,而我不想取消 CLASS_1
中的订阅。
现在我想弄清楚是否使用 ConnectionMultiplexer 导致了问题?或者任何信息都会有帮助。
提前谢谢您! :)
使用
public void Unsubscribe(RedisChannel channel, Action<RedisChannel,RedisValue> msgHndlr)
{
var sub = _connectionMultiplexer.GetSubscriber();
sub.Unsubscribe(channel, msgHndlr, CommandFlags.FireAndForget);
}