(6)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- AOP框架
AOP 框架基础
要求懂的知识:AOP、Filter、反射(Attribute)。
如果直接使用 Polly,那么就会造成业务代码中混杂大量的业务无关代码。我们使用 AOP (如果不了解 AOP,请自行参考网上资料)的方式封装一个简单的框架,模仿 Spring cloud 中的 Hystrix。
需要先引入一个支持.Net Core 的 AOP,我们用.Net Core 下的 AOP 框架是AspectCore(国产,动态织入),其他要不就是不支持.Net Core,要不就是不支持对异步方法进行拦截 MVC Filter。
GitHub:https://github.com/dotnetcore/AspectCore-Framework
Install-Package AspectCore.Core -Version 0.5.0
这里只介绍和我们相关的用法:
1、编写拦截器CustomInterceptorAttribute 一般继承自AbstractInterceptorAttribute
public class CustomInterceptorAttribute:AbstractInterceptorAttribute { //每个被拦截的方法中执行 public async override Task Invoke(AspectContext context, AspectDelegate next) {
try { Console.WriteLine("执行之前");
await next(context);//执行被拦截的方法 } catch (Exception) { Console.WriteLine("被拦截的方法出现异常");
throw; } finally { Console.WriteLine("执行之后"); } } }
2、编写需要被代理拦截的类
在要被拦截的方法上标注CustomInterceptorAttribute 。类需要是public类,方法如果需要拦截就是虚方法,支持异步方法,因为动态代理是动态生成被代理的类的动态子类实现的。
public class Person { [CustomInterceptor] public virtual void Say(string msg) { Console.WriteLine("service calling..."+msg); } }
3、通过AspectCore创建代理对象
ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { Person p = proxyGenerator.CreateClassProxy<Person>(); p.Say("rupeng.com"); } Console.ReadKey();
注意p指向的对象是AspectCore生成的Person的动态子类的对象,直接new Person是无法被拦截的。
研究AOP细节
拦截器中Invoke方法下的参数AspectContext的属性的含义:
Implementation 实际动态创建的Person子类的对象。
ImplementationMethod就是Person子类的Say方法
Parameters 方法的参数值。
Proxy==Implementation:当前场景下
ProxyMethod==ImplementationMethod:当前场景下
ReturnValue返回值
ServiceMethod是Person的Say方法
注:此文章是我看杨中科老师的.Net Core微服务第二版和.Net Core微服务第二版课件整理出来的
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为什么SD-WAN现在飞速发展?
多年来,软件定义的广域网(SD-WAN)被认为是一群初创企业的利基市场。 现在将不再是这种情况。现在,SD-WAN市场使用网络虚拟化来利用、管理和保护互联网宽带,为企业应用构建更强大的网络,SD-WAN正在蓬勃发展,并有望达到数十亿美元的企业网络服务,其中包括云安全等辅助产品。 来自企业和服务提供商终端用户群体的反馈表明,SD-WAN技术需求强劲,SD-WAN能够降低部署和管理企业网络的资本支出(capex)和运营支出(opex)。 Futuriom的新SD-WAN增长报告详细描述了SD-WAN工具、平台和NaaS市场的规模,预计2019年将达到10亿美元的收入,到2021年可能达到25亿美元,复合年增长率为35%。 思科和VMware等主要网络运营商嗅到了潜在增长机会,在过去的一年中进入SD-WAN市场进行了重大收购(思科以6.1亿美元收购了Viptela,VMware以4.5亿美元收购了VeloCloud)。与此同时,少数私营SD-WAN初创公司收入似乎已达到1亿美元。 许多公司在战略上已经落后于这个市场。像诺基亚,爱立信和Juniper这样的网络运营商似乎缺乏全面的SD-WAN战...
- 下一篇
(7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
创建简单的熔断降级框架 要达到的目标是:参与降级的方法参数要一样,当HelloAsync执行出错的时候执行HelloFallBackAsync方法。 public class Person { [HystrixCommand("HelloFallBackAsync")] public virtual async Task<string> HelloAsync(string name) { Console.WriteLine("hello"+name);return "ok"; } public async Task<string> HelloFallBackAsync(string name) { Console.WriteLine("执行失败"+name); return "fail"; }} 1、编写 HystrixCommandAttribute using AspectCore.DynamicProxy; using System; using System.Threading.Tasks; namespace hystrixtest1 { //限制这个...
相关文章
文章评论
共有0条评论来说两句吧...