private async Task SendRemoteInvokeErrorResult(IMessageSender sender, string messageId, int statusCode, string errorMessage) { try { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("准备发送响应消息。"); } await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, new RemoteInvokeResultMessage { StatusCode = statusCode, ExceptionMessage = errorMessage })); if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("响应消息发送成功。"); } } catch (Exception exception) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.LogError(exception, "发送响应消息时候发生了异常。"); } } }
private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId, RemoteInvokeResultMessage resultMessage) { try { Console.WriteLine("准备发送响应消息"); await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage)); Console.WriteLine("响应消息发送成功"); } catch (Exception exception) { Console.WriteLine("发送响应消息时候发生了异常" + exception); } }
public Task OnReceive(IChannelHandlerContext context, object message) { var data = (TransportMessage)message; var result = _invoker.InvokerAsync(data).Result; if (result == null) { throw new RpcRemoteException("本地服务调用失败", null); } var transportMessage = TransportMessage.CreateInvokeResultMessage(data.Id, result); //var transportMessage = new TransportMessage(result); var byteMessage = _encoder.Encode(transportMessage); var buffer = Unpooled.Buffer(byteMessage.Length, byteMessage.Length); buffer.WriteBytes(byteMessage); return(context.WriteAndFlushAsync(buffer)); }
private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId, RemoteInvokeResultMessage resultMessage) { try { _logger.LogInformation("准备发送响应消息"); await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage)); _logger.LogInformation("响应消息发送成功"); } catch (Exception exception) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.LogError("发送响应消息时候发生了异常。", exception); } } }
private async Task SendRemoteInvokeResult(IMessageSender sender, long messageId, RemoteInvokeResultMessage resultMessage) { try { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("准备发送响应消息。"); } await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage)); if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("响应消息发送成功。"); } } catch (Exception exception) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.LogError("发送响应消息时候发生了异常。", exception); } } }
/// <summary> /// 执行。 /// </summary> /// <param name="sender">消息发送者。</param> /// <param name="message">调用消息。</param> public async Task ExecuteAsync(IMessageSender sender, TransportMessage message) { if (_logger.IsEnabled(LogLevel.Information)) { _logger.Information("接收到消息。"); } if (!message.IsInvokeMessage()) { return; } RemoteInvokeMessage remoteInvokeMessage; try { remoteInvokeMessage = _objecSerializer.Deserialize <object, RemoteInvokeMessage>(message.Content); } catch (Exception exception) { _logger.Error($"将接收到的消息反序列化成 TransportMessage<RemoteInvokeMessage> 时发送了错误。", exception); return; } var entry = _serviceEntryLocate.Locate(remoteInvokeMessage); if (entry == null) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.Error($"根据服务Id:{remoteInvokeMessage.ServiceId},找不到服务条目。"); } return; } if (_logger.IsEnabled(LogLevel.Debug)) { _logger.Debug("准备执行本地逻辑。"); } var resultMessage = new RemoteInvokeResultMessage(); try { var result = entry.Func(remoteInvokeMessage.Parameters); var task = result as Task; if (task == null) { resultMessage.Result = result; } else { task.Wait(); var taskType = task.GetType(); if (taskType.IsGenericType) { resultMessage.Result = taskType.GetProperty("Result").GetValue(task); } } } catch (Exception exception) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.Error("执行本地逻辑时候发生了错误。", exception); } resultMessage.ExceptionMessage = GetExceptionMessage(exception); } try { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.Debug("准备发送响应消息。"); } await sender.SendAsync(TransportMessage.CreateInvokeResultMessage(message.Id, resultMessage)); if (_logger.IsEnabled(LogLevel.Debug)) { _logger.Debug("响应消息发送成功。"); } } catch (Exception exception) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.Error("发送响应消息时候发生了异常。", exception); } } }