surging 將推出社區版微服務平臺

前言

對於.NET大家並不陌生,有大批的企業選擇.NET作爲公司構建多種應用的開發平臺,但是近幾年隨着微服務,大數據,移動端,物聯網興起,而後.NET社區生態沒有跟上時代的步伐,已開始趨於沒落,而其中最具代表的微服務,能夠提供多種業務場景的解決方案的只有surging ,而surging 最近幾年也在不斷推動發展,預計明年將升級成爲微服務平臺,在這之前會在公司的重點項目中使用surging ,以便推出給大家帶來穩定,高效的微服務平臺,大家如果要得到最新的消息可以添加羣:744677125,此羣請不要涉及政治,暴力,因爲有些人玩不起。多聊技術,積極向上開心的事情,以下是介紹最新的微服務平臺功能

過濾器

框架中有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微服務平臺 會更新到https://github.com/microsurging,請大家關注

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章