gpt4 book ai didi

c# - StackExchange.Redis ConnectionMultiplexer - 处理断开连接

转载 作者:IT王子 更新时间:2023-10-29 06:07:46 26 4
gpt4 key购买 nike

在 ConnectionMultiplexer 中处理套接字故障的正确方法是什么?我知道它会在后台静静地重试,但是有没有公认的规范方法来处理这种断开连接之间的时间?由于无论如何我都将其包装在我们自己的客户中,所以我在想类似以下的事情:

  private async Task<IDatabase> GetDb(int dbToGet)
{
int numberOfRetries = 0;
while (!multiplexer.IsConnected && numberOfRetries < MAX_RETRIES)
{
await Task.Delay(20);
numberOfRetries++;
}
if (!multiplexer.IsConnected)
{
// Panic, die, etc.
}

// Continue as though connected here
}

虽然看起来有点笨拙,所以我想知道是否有更好的方法来处理这个问题。

(这一切都在 StackExchange.Redis 的 1.0.414 版本中,来自 NuGet 的最新版本)

最佳答案

我只是包装了多路复用器,默认情况下,它具有自动重新连接定义,真正的问题是您已经使用当前套接字连接订阅/订阅 Redis,因此,我使用 ConnectionRestored 事件将订阅模式重新注册到相关 channel /操作。

类示例:

public class RedisInstanceManager
{
public RedisInstanceCredentials m_redisInstanceCredentials { get; set; }
public DateTime? m_lastUpdatedDate { get; set; }
public ConnectionMultiplexer redisClientsFactory { get; set; }
public Timer _ConnectedTimer;
public Action _reconnectAction;
public RedisInstanceManager(ConnectionMultiplexer redisClients, Action _reconnectActionIncoming)
{
string host,port;
string[] splitArray = redisClients.Configuration.Split(':');
host = splitArray[0];
port = splitArray[1];

this.redisClientsFactory = redisClients;
this.m_redisInstanceCredentials = new RedisInstanceCredentials(host, port);
this.m_lastUpdatedDate = null;
_ConnectedTimer = new Timer(connectedTimer, null, 1500, 1500);
_reconnectAction = _reconnectActionIncoming;
this.redisClientsFactory.ConnectionRestored += redisClientsFactory_ConnectionRestored;
}

private void connectedTimer(object o)
{
_ConnectedTimer.Change(Timeout.Infinite, Timeout.Infinite);
if (!this.redisClientsFactory.IsConnected)
{
Console.WriteLine("redis dissconnected");
}
_ConnectedTimer.Change(1500,1500);
}

void redisClientsFactory_ConnectionRestored(object sender, ConnectionFailedEventArgs e)
{
Console.WriteLine("Redis Connected again");
if (_reconnectAction != null)
_reconnectAction();
}

public ConnectionMultiplexer GetClient()
{
return this.redisClientsFactory;
}
}

关于c# - StackExchange.Redis ConnectionMultiplexer - 处理断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com