Skip to content

Commit a1182e2

Browse files
committed
chore: 日志
1 parent 933ccea commit a1182e2

2 files changed

Lines changed: 100 additions & 28 deletions

File tree

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public async Task StartAsync()
126126
return;
127127
}
128128

129-
_logger.LogInformation($"Starting hybrid cluster transport for node {_nodeId}");
129+
_logger.LogWarning($"[HybridClusterTransport] 启动混合集群传输 - NodeId: {_nodeId}, Address: {_nodeInfo.Address}, Port: {_nodeInfo.Port}, Endpoint: {_nodeInfo.Endpoint}");
130130

131131
try
132132
{
@@ -159,7 +159,7 @@ public async Task StartAsync()
159159
await _messageQueueService.ConsumeAsync(_queueName, HandleMessageAsync, autoAck: false);
160160

161161
_started = true;
162-
_logger.LogInformation($"Hybrid cluster transport started for node {_nodeId}");
162+
_logger.LogWarning($"[HybridClusterTransport] 混合集群传输启动成功 - NodeId: {_nodeId}, QueueName: {_queueName}, ExchangeName: {ExchangeName}");
163163
}
164164
catch (Exception ex)
165165
{
@@ -246,11 +246,11 @@ public async Task SendAsync(string nodeId, ClusterMessage message)
246246

247247
await _messageQueueService.PublishAsync(ExchangeName, routingKey, messageBytes, properties);
248248

249-
_logger.LogDebug($"Sent message {message.MessageId} to node {nodeId}");
249+
_logger.LogWarning($"[HybridClusterTransport] 消息发送成功 - TargetNodeId: {nodeId}, MessageId: {message.MessageId}, MessageType: {message.Type}, CurrentNodeId: {_nodeId}, MessageSize: {messageBytes.Length} bytes");
250250
}
251251
catch (Exception ex)
252252
{
253-
_logger.LogError(ex, $"Failed to send message to node {nodeId}");
253+
_logger.LogError(ex, $"[HybridClusterTransport] 消息发送失败 - TargetNodeId: {nodeId}, MessageId: {message.MessageId}, MessageType: {message.Type}, CurrentNodeId: {_nodeId}, Error: {ex.Message}, StackTrace: {ex.StackTrace}");
254254
throw;
255255
}
256256
}
@@ -296,11 +296,11 @@ public async Task BroadcastAsync(ClusterMessage message)
296296

297297
await _messageQueueService.PublishAsync(ExchangeName, BroadcastRoutingKey, messageBytes, properties);
298298

299-
_logger.LogDebug($"Broadcasted message {message.MessageId} to all nodes");
299+
_logger.LogWarning($"[HybridClusterTransport] 广播消息成功 - MessageId: {message.MessageId}, MessageType: {message.Type}, CurrentNodeId: {_nodeId}, MessageSize: {messageBytes.Length} bytes, 已知节点数: {_knownNodes.Count}");
300300
}
301301
catch (Exception ex)
302302
{
303-
_logger.LogError(ex, "Failed to broadcast message");
303+
_logger.LogError(ex, $"[HybridClusterTransport] 广播消息失败 - MessageId: {message.MessageId}, MessageType: {message.Type}, CurrentNodeId: {_nodeId}, Error: {ex.Message}, StackTrace: {ex.StackTrace}");
304304
throw;
305305
}
306306
}
@@ -453,13 +453,16 @@ private async Task<bool> HandleMessageAsync(byte[] body, MessageProperties prope
453453

454454
if (message == null)
455455
{
456-
_logger.LogWarning("Received null or invalid message");
456+
_logger.LogWarning($"[HybridClusterTransport] 收到空或无效消息 - CurrentNodeId: {_nodeId}");
457457
return true; // Ack to remove from queue / 确认以从队列中移除
458458
}
459459

460+
_logger.LogWarning($"[HybridClusterTransport] 收到集群消息 - MessageType: {message.Type}, FromNodeId: {message.FromNodeId}, ToNodeId: {message.ToNodeId}, MessageId: {message.MessageId}, CurrentNodeId: {_nodeId}, MessageSize: {body.Length} bytes");
461+
460462
// Ignore messages from self / 忽略来自自己的消息
461463
if (message.FromNodeId == _nodeId)
462464
{
465+
_logger.LogWarning($"[HybridClusterTransport] 忽略来自自己的消息 - MessageId: {message.MessageId}, CurrentNodeId: {_nodeId}");
463466
return true;
464467
}
465468

@@ -515,6 +518,7 @@ private async Task<bool> HandleMessageAsync(byte[] body, MessageProperties prope
515518
}
516519

517520
// Trigger message received event / 触发消息接收事件
521+
_logger.LogWarning($"[HybridClusterTransport] 触发消息接收事件 - MessageType: {message.Type}, FromNodeId: {message.FromNodeId}, ToNodeId: {message.ToNodeId}, MessageId: {message.MessageId}, CurrentNodeId: {_nodeId}");
518522
MessageReceived?.Invoke(this, new ClusterMessageEventArgs
519523
{
520524
FromNodeId = message.FromNodeId,
@@ -586,7 +590,7 @@ private void OnNodeDiscovered(object sender, NodeInfo nodeInfo)
586590
var wasNew = _knownNodes.TryAdd(nodeInfo.NodeId, nodeInfo);
587591
if (wasNew)
588592
{
589-
_logger.LogInformation($"Node {nodeInfo.NodeId} discovered: {nodeInfo.Address}:{nodeInfo.Port}");
593+
_logger.LogWarning($"[HybridClusterTransport] 发现新节点 - NodeId: {nodeInfo.NodeId}, Address: {nodeInfo.Address}, Port: {nodeInfo.Port}, CurrentNodeId: {_nodeId}, 已知节点数: {_knownNodes.Count}");
590594
NodeConnected?.Invoke(this, new ClusterNodeEventArgs { NodeId = nodeInfo.NodeId });
591595
}
592596
else
@@ -608,7 +612,7 @@ private void OnNodeRemoved(object sender, string nodeId)
608612

609613
if (_knownNodes.TryRemove(nodeId, out _))
610614
{
611-
_logger.LogInformation($"Node {nodeId} removed from cluster");
615+
_logger.LogWarning($"[HybridClusterTransport] 节点从集群中移除 - NodeId: {nodeId}, CurrentNodeId: {_nodeId}, 剩余节点数: {_knownNodes.Count}");
612616
NodeDisconnected?.Invoke(this, new ClusterNodeEventArgs { NodeId = nodeId });
613617
}
614618
}

Cyaim.WebSocketServer/Cyaim.WebSocketServer/Infrastructure/Cluster/RaftNode.cs

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,9 @@ private async Task StartElectionAsync()
224224

225225
if (knownNodes.Count == 0)
226226
{
227-
_logger.LogWarning($"No known nodes found, cannot start election. Node will remain as candidate.");
227+
// 单节点场景是正常的,降低日志级别避免频繁警告
228+
// Single node scenario is normal, reduce log level to avoid frequent warnings
229+
_logger.LogDebug($"No known nodes found, cannot start election. Node will remain as candidate. This is normal in single-node scenarios or when other nodes haven't started yet.");
228230
return;
229231
}
230232

@@ -763,27 +765,93 @@ private List<string> GetKnownNodeIds()
763765
}
764766
else
765767
{
766-
// For Redis/RabbitMQ, nodes are registered differently
767-
// 对于 Redis/RabbitMQ,节点的注册方式不同
768-
// They should maintain their own node registry
769-
// 它们应该维护自己的节点注册表
770-
// For now, we'll rely on the cluster configuration
771-
_logger.LogDebug($"Transport is not WebSocketClusterTransport, using cluster configuration");
772-
// 目前,我们将依赖集群配置
773-
var clusterOption = GlobalClusterCenter.ClusterContext;
774-
if (clusterOption?.Nodes != null)
768+
// For HybridClusterTransport (Redis + RabbitMQ), nodes are discovered dynamically via Redis
769+
// 对于 HybridClusterTransport(Redis + RabbitMQ),节点通过 Redis 动态发现
770+
// Try to get known nodes from HybridClusterTransport via reflection
771+
// 尝试通过反射从 HybridClusterTransport 获取已知节点
772+
try
773+
{
774+
var transportType = _transport.GetType();
775+
if (transportType.Name == "HybridClusterTransport" || transportType.FullName?.Contains("HybridClusterTransport") == true)
776+
{
777+
_logger.LogDebug($"Transport is HybridClusterTransport, attempting to get known nodes via reflection");
778+
779+
// Get _knownNodes field via reflection / 通过反射获取 _knownNodes 字段
780+
var knownNodesField = transportType.GetField("_knownNodes",
781+
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
782+
783+
if (knownNodesField != null)
784+
{
785+
var knownNodesDict = knownNodesField.GetValue(_transport);
786+
if (knownNodesDict is System.Collections.IDictionary dict)
787+
{
788+
foreach (System.Collections.DictionaryEntry entry in dict)
789+
{
790+
var nodeId = entry.Key?.ToString();
791+
if (!string.IsNullOrEmpty(nodeId) && nodeId != _nodeId)
792+
{
793+
nodeIds.Add(nodeId);
794+
_logger.LogDebug($"Found node '{nodeId}' from HybridClusterTransport");
795+
}
796+
}
797+
}
798+
}
799+
800+
// If no nodes found via reflection, fall back to cluster configuration
801+
// 如果通过反射没有找到节点,回退到集群配置
802+
if (nodeIds.Count == 0)
803+
{
804+
_logger.LogDebug($"No nodes found in HybridClusterTransport, falling back to cluster configuration");
805+
var clusterOption = GlobalClusterCenter.ClusterContext;
806+
if (clusterOption?.Nodes != null)
807+
{
808+
foreach (var nodeConfig in clusterOption.Nodes)
809+
{
810+
var parts = nodeConfig.Split('@');
811+
var nodeId = parts.Length > 0 ? parts[0] : nodeConfig;
812+
if (!string.IsNullOrEmpty(nodeId) && nodeId != _nodeId)
813+
{
814+
nodeIds.Add(nodeId);
815+
}
816+
}
817+
}
818+
}
819+
}
820+
else
821+
{
822+
// For other transports (Redis/RabbitMQ), use cluster configuration
823+
// 对于其他传输(Redis/RabbitMQ),使用集群配置
824+
_logger.LogDebug($"Transport is not WebSocketClusterTransport or HybridClusterTransport, using cluster configuration");
825+
var clusterOption = GlobalClusterCenter.ClusterContext;
826+
if (clusterOption?.Nodes != null)
827+
{
828+
foreach (var nodeConfig in clusterOption.Nodes)
829+
{
830+
var parts = nodeConfig.Split('@');
831+
var nodeId = parts.Length > 0 ? parts[0] : nodeConfig;
832+
if (!string.IsNullOrEmpty(nodeId) && nodeId != _nodeId)
833+
{
834+
nodeIds.Add(nodeId);
835+
}
836+
}
837+
}
838+
}
839+
}
840+
catch (Exception ex)
775841
{
776-
foreach (var nodeConfig in clusterOption.Nodes)
842+
_logger.LogWarning(ex, $"Failed to get known nodes from transport, falling back to cluster configuration");
843+
// Fall back to cluster configuration / 回退到集群配置
844+
var clusterOption = GlobalClusterCenter.ClusterContext;
845+
if (clusterOption?.Nodes != null)
777846
{
778-
// For Redis/RabbitMQ, node config might be different format
779-
// 对于 Redis/RabbitMQ,节点配置可能是不同的格式
780-
// Assuming format: nodeId@address or just nodeId
781-
// 假设格式:nodeId@address 或仅 nodeId
782-
var parts = nodeConfig.Split('@');
783-
var nodeId = parts.Length > 0 ? parts[0] : nodeConfig;
784-
if (!string.IsNullOrEmpty(nodeId) && nodeId != _nodeId)
847+
foreach (var nodeConfig in clusterOption.Nodes)
785848
{
786-
nodeIds.Add(nodeId);
849+
var parts = nodeConfig.Split('@');
850+
var nodeId = parts.Length > 0 ? parts[0] : nodeConfig;
851+
if (!string.IsNullOrEmpty(nodeId) && nodeId != _nodeId)
852+
{
853+
nodeIds.Add(nodeId);
854+
}
787855
}
788856
}
789857
}

0 commit comments

Comments
 (0)