Rpc服务AOP
一、说明
RPC服务在被调用是,可以使用实现IRpcActionFilter的特性(Attribute),进行相关AOP操作。
二、声明特性
public class MyRpcActionFilterAttribute : RpcActionFilterAttribute
{
public override void Executing(ICallContext callContext, object[] parameters, ref InvokeResult invokeResult)
{
//invokeResult = new InvokeResult()
//{
// Status = InvokeStatus.UnEnable,
// Message = "不允许执行",
// Result = default
//};
if (callContext.Caller is TcpTouchRpcSocketClient client)
{
client.Logger.Info($"即将执行RPC-{callContext.MethodInstance.Name}");
}
base.Executing(callContext, parameters, ref invokeResult);
}
public override void Executed(ICallContext callContext, object[] parameters, ref InvokeResult invokeResult)
{
if (callContext.Caller is TcpTouchRpcSocketClient client)
{
client.Logger.Info($"执行RPC-{callContext.MethodInstance.Name}完成,状态={invokeResult.Status}");
}
base.Executed(callContext, parameters, ref invokeResult);
}
public override void ExecutException(ICallContext callContext, object[] parameters, ref InvokeResult invokeResult, Exception exception)
{
if (callContext.Caller is TcpTouchRpcSocketClient client)
{
client.Logger.Info($"执行RPC-{callContext.MethodInstance.Name}异常,信息={invokeResult.Message}");
}
base.ExecutException(callContext, parameters, ref invokeResult, exception);
}
}
提示
每个方法都有详细的注释,仔细查看可能会事半功倍。
三、使用
[Description("性能测试")]
[TouchRpc]
[MyRpcActionFilter]
public int Performance(int a)
{
return a;
}