surging 將推出社區版微服務平台
前言
對於.NET大家並不陌生,有大批的企業選擇.NET作為公司構建多種應用的開發平台,但是近幾年隨著微服務,大數據,移動端,物聯網興起,而後.NET社區生態沒有跟上時代的步伐,已開始趨於沒落,而其中最具代表的微服務,能夠提供多種業務場景的解決方案的只有surging ,而surging 最近幾年也在不斷推動發展,預計明年將升級成為微服務平台,在這之前會在公司的重點項目中使用surging ,以便推出給大家帶來穩定,高效的微服務平台,大家如果要得到最新的消息可以添加群:21811617,此群請不要涉及政治,暴力,因為有些人玩不起。多聊技術,積極向上開心的事情,以下是介紹最新的微服務平台功能
過濾器
框架中有AuthorizationFilter,ExceptionFilter,ActionFilter,而ActionFilter是最近新添加的功能,此功能可以用來做許可權,創建ActionFilter過濾器如下:
public class PermissionAttribute : BaseActionFilterAttribute { private readonly ISerializer<string> _serializer; public PermissionAttribute() { _serializer = ServiceLocator.Current.Resolve<ISerializer<string>>(); } public override Task OnActionExecutingAsync(ServiceRouteContext actionExecutedContext, CancellationToken cancellationToken) { var payload= RpcContext.GetContext().GetAttachment("payload"); var model= _serializer.Deserialize(payload.ToString().Trim('"').Replace("\\",""),typeof(UserModel)); // actionExecutedContext.ResultMessage.ExceptionMessage = "許可權不足";//通過ExceptionMessage 來控制過濾 return Task.FromResult(model); } }
添加註入到引擎中,添加模組配置:
public class IntercepteModule : SystemModule { public override void Initialize(AppModuleContext context) { base.Initialize(context); } /// <summary> /// Inject dependent third-party components /// </summary> /// <param name="builder"></param> protected override void RegisterBuilder(ContainerBuilderWrapper builder) { base.RegisterBuilder(builder); builder.AddClientIntercepted(typeof(CacheProviderInterceptor)); builder.AddFilter(typeof(PermissionAttribute)); //builder.AddClientIntercepted(typeof(LogProviderInterceptor)); } }
然後可以在介面方法中添加Permission特性
[Authorization(AuthType = AuthorizationType.JWT)] [Permission] [HttpPost(true),HttpPut(true)] Task<IdentityUser> Save(IdentityUser requestData);
也可以在介面上添加Permission特性
[ServiceBundle("api/{Service}/{Method}")] [Permission] //[ServiceBundle("api/{Service}")] //[ServiceBundle("api/{Service}/{Method}/test")] //[ServiceBundle("api/{Service}/{Method}/test",false)] public interface IUserService: IServiceKey { [Authorization(AuthType = AuthorizationType.JWT)] [Permission] [HttpPost(true),HttpPut(true)] Task<IdentityUser> Save(IdentityUser requestData); }
不登陸調用會看到如下錯誤資訊:
然後從RpcContext.GetContext().GetAttachment(“payload”)程式碼中的jwt token 的payload 可以獲取資訊,斷點測試如下:
鏈路跟蹤
鏈路跟蹤採用的是skywalking 6.0 , 而最新的已經升級到8.0, 可以看surging支援的skywalking 8.0:
平台可視化介面
總結
surging 支援的國標28181,rtmp,httpflv,ws,mqtt,rtsp就不過多介紹了,後續surging微服務平台 會更新到//github.com/microsurging,請大家關注