Skip to content

Commit 5cdbcbc

Browse files
committed
fix
1 parent c06fe09 commit 5cdbcbc

1 file changed

Lines changed: 9 additions & 36 deletions

File tree

Cyaim.WebSocketServer/Cluster/Cyaim.WebSocketServer.Cluster.Hybrid/HybridClusterTransport.cs

Lines changed: 9 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -208,20 +208,13 @@ public async Task StartAsync()
208208

209209
_logger.LogWarning($"[HybridClusterTransport] 消费者启动完成 - QueueName: {_queueName}, CurrentNodeId: {_nodeId}");
210210

211-
// Verify queue and consumer still exist after a short delay / 短暂延迟后验证队列和消费者是否仍然存在
212-
await Task.Delay(500); // Wait 500ms to ensure consumer is fully registered / 等待 500ms 确保消费者已完全注册
213-
await VerifyQueueAndConsumerAsync(_queueName);
214-
215211
// Start periodic binding health check / 启动定期绑定健康检查
216212
_bindingHealthCheckTimer = new Timer(async _ => await CheckAndRepairBindingsAsync(), null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(5));
217213

218214
// Wait a bit for initial node discovery / 等待初始节点发现
219215
_logger.LogWarning($"[HybridClusterTransport] 等待初始节点发现... - NodeId: {_nodeId}");
220216
await Task.Delay(2000); // Wait 2 seconds for initial discovery / 等待 2 秒进行初始发现
221217

222-
// Verify queue and consumer still exist after discovery delay / 发现延迟后再次验证队列和消费者是否仍然存在
223-
await VerifyQueueAndConsumerAsync(_queueName);
224-
225218
// Log discovered nodes / 记录发现的节点
226219
var discoveredNodes = GetKnownNodeIds();
227220
_logger.LogWarning($"[HybridClusterTransport] 初始节点发现完成 - NodeId: {_nodeId}, DiscoveredNodeCount: {discoveredNodes.Count}, DiscoveredNodes: {string.Join(", ", discoveredNodes)}");
@@ -1116,43 +1109,23 @@ private async Task VerifyQueueAndConsumerAsync(string queueName)
11161109
{
11171110
_logger.LogWarning($"[HybridClusterTransport] 开始验证队列和消费者 - QueueName: {queueName}, CurrentNodeId: {_nodeId}");
11181111

1119-
// Verify connection is ready / 验证连接已就绪
1120-
await _messageQueueService.VerifyConnectionAsync();
1121-
1122-
// Try to verify queue exists using passive declare / 尝试使用被动声明验证队列是否存在
1123-
// This will throw if queue doesn't exist / 如果队列不存在会抛出异常
1112+
// 直接验证队列是否存在,不调用 VerifyConnectionAsync 避免死锁
1113+
// Directly verify queue exists, don't call VerifyConnectionAsync to avoid deadlock
1114+
// ConsumeAsync 内部会确保连接和 channel 就绪
1115+
// ConsumeAsync will ensure connection and channel are ready internally
11241116
try
11251117
{
1126-
// Note: We can't directly check consumer count from HybridClusterTransport,
1127-
// but we can verify the queue exists and re-create consumer if needed
1128-
// 注意:我们无法直接从 HybridClusterTransport 检查消费者数量,
1129-
// 但我们可以验证队列是否存在,并在需要时重新创建消费者
1130-
await VerifyQueueExistsAsync(queueName);
1131-
1132-
// Re-create consumer if it might have been lost / 如果消费者可能丢失,重新创建
1133-
// This ensures consumer is always active / 这确保消费者始终处于活动状态
1118+
// 尝试重新创建消费者,如果消费者已存在会跳过
1119+
// Try to recreate consumer, will skip if consumer already exists
11341120
_logger.LogWarning($"[HybridClusterTransport] 重新验证消费者 - QueueName: {queueName}, CurrentNodeId: {_nodeId}");
11351121
await _messageQueueService.ConsumeAsync(queueName, HandleMessageAsync, autoAck: false, currentNodeId: _nodeId);
11361122

11371123
_logger.LogWarning($"[HybridClusterTransport] 队列和消费者验证成功 - QueueName: {queueName}, CurrentNodeId: {_nodeId}");
11381124
}
11391125
catch (Exception ex)
11401126
{
1141-
_logger.LogError(ex, $"[HybridClusterTransport] 队列或消费者验证失败,尝试恢复 - QueueName: {queueName}, CurrentNodeId: {_nodeId}, Error: {ex.Message}");
1142-
1143-
// Try to recover by re-declaring queue and re-creating consumer / 尝试通过重新声明队列和重新创建消费者来恢复
1144-
try
1145-
{
1146-
_logger.LogWarning($"[HybridClusterTransport] 尝试恢复队列和消费者 - QueueName: {queueName}, CurrentNodeId: {_nodeId}");
1147-
await VerifyQueueExistsAsync(queueName);
1148-
await _messageQueueService.ConsumeAsync(queueName, HandleMessageAsync, autoAck: false, currentNodeId: _nodeId);
1149-
_logger.LogWarning($"[HybridClusterTransport] 队列和消费者恢复成功 - QueueName: {queueName}, CurrentNodeId: {_nodeId}");
1150-
}
1151-
catch (Exception recoverEx)
1152-
{
1153-
_logger.LogError(recoverEx, $"[HybridClusterTransport] 队列和消费者恢复失败 - QueueName: {queueName}, CurrentNodeId: {_nodeId}, Error: {recoverEx.Message}");
1154-
throw;
1155-
}
1127+
_logger.LogWarning(ex, $"[HybridClusterTransport] 消费者验证失败(可能已存在),跳过 - QueueName: {queueName}, CurrentNodeId: {_nodeId}, Error: {ex.Message}");
1128+
// 消费者可能已存在,这是正常的 / Consumer might already exist, this is normal
11561129
}
11571130
}
11581131
catch (Exception ex)
@@ -1183,7 +1156,7 @@ private async Task VerifyQueueExistsAsync(string queueName)
11831156
// Try to declare queue again to verify it exists / 尝试再次声明队列以验证它是否存在
11841157
// This will return the existing queue if it exists, or create it if it doesn't
11851158
// 如果队列存在则返回现有队列,如果不存在则创建它
1186-
var verifiedQueueName = await _messageQueueService.DeclareQueueAsync(queueName, durable: false, exclusive: false, autoDelete: true);
1159+
var verifiedQueueName = await _messageQueueService.DeclareQueueAsync(queueName, durable: false, exclusive: false, autoDelete: false);
11871160

11881161
if (string.IsNullOrEmpty(verifiedQueueName))
11891162
{

0 commit comments

Comments
 (0)