首页 > 其他分享 >基于surging的木舟平台如何构建起微服务

基于surging的木舟平台如何构建起微服务

时间:2024-11-12 08:46:44浏览次数:1  
标签:AuthType Task 服务 木舟 起微 AuthorizationType JWT surging Authorization

一、概述

    木舟平台分为微服务平台和物联网平台, 上面几篇都是介绍如何通过网络组件接入设备,那么此篇文章就细致介绍下在木舟平台下如何构建微服务。

      木舟 (Kayak) 是什么?

       木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的, 平台包含了微服务和物联网平台。支持异步和响应式编程开发,功能包含了物模型,设备,产品,网络组件的统一管理和微服务平台下的注册中心,服务路由,模块,中间服务等管理。还有多协议适配(TCP,MQTT,UDP,CoAP,HTTP,Grpc,websocket,rtmp,httpflv,webservice,等),通过灵活多样的配置适配能够接入不同厂家不同协议等设备。并且通过设备告警,消息通知,数据可视化等功能。能够让你能快速建立起微服务物联网平台系统。

     那么下面就为大家介绍如何从创建组件、协议、设备网关,设备到设备网关接入,再到设备数据上报,把整个流程通过此篇文章进行阐述。

二、构建服务

创建服务接口,继承IServiceKey,添加特性[ServiceBundle("api/{Service}/{Method}")] 配置routepath,代码如下:

   [ServiceBundle("api/{Service}/{Method}")]
   public interface ITestApiService:IServiceKey
   { 
       public Task<string> SayHello(string name);
   }

创建服务实例,继承ProxyServiceBase, ITestApiService, ISingleInstance,如果只是业务处理只需继承ProxyServiceBase,继承ISingleInstance表示注入的生命周期 为单例模式,添加特性ModuleName标识一个服务多个实例,可以在调用的时候传入ServiceKey

    [ModuleName("Test")]
    public class TestService : ProxyServiceBase, ITestApiService, ISingleInstance
    {
        public Task<string> SayHello(string name)
        {
            return Task.FromResult($"{name} say:hello world");
        }
    }

 

二、身份鉴权

webapi调用必然会牵涉到身份鉴权,用户登录问题,而surging 已经集成了一套jwt验证机制

然后在Stage配置节上配置ApiGetWay

   "ApiGetWay": {
     "AccessTokenExpireTimeSpan": "240",
     "AuthorizationRoutePath": "api/sysuser/authentication",//身份鉴权服务的routepath
     "AuthorizationServiceKey": null,
     "TokenEndpointPath": "api/oauth2/token",//映射调用的routepath
     "CacheMode": "MemoryCache" //MemoryCache or  gateway.Redis save token
   }

 

然后在接口方法上加上  [Authorization(AuthType = AuthorizationType.JWT)] 特性,服务调用就要进行身份鉴权

    public interface IModuleService : IServiceKey
    {
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<ApiResult<bool>> Add(ModuleModel model);

        [Authorization(AuthType = AuthorizationType.JWT)]      
        Task<ApiResult<bool>> Modify(ModuleModel model);

        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<ApiResult<Page<ModuleModel>>> GetPageAsync(ModuleQuery query);

    }

三、缓存拦截

surging 可以支持拦截缓存,可以通过ServiceCacheIntercept特性进行配置,获取缓存可以通过CachingMethod.Get, 删除缓存可以通过CachingMethod.Remove,可以支持MemoryCache,Redis, 可以支持一,二级缓存,

启用EnableStageCache表示网关调用也可以走缓存拦截(注:不支持模型参数)

 [ServiceBundle("api/{Service}/{Method}")]
 public interface IProductService : IServiceKey
 {
     [Authorization(AuthType = AuthorizationType.JWT)]
     [ServiceCacheIntercept(CachingMethod.Remove, "GetProducts", CacheSectionType = "ddlCache", Mode = CacheTargetType.MemoryCache, EnableStageCache = true)]
     Task<ApiResult<bool>> Add(ProductModel model);

     [Authorization(AuthType = AuthorizationType.JWT)]
     Task<ApiResult<ProductModel>> GetProduct(int id);

     [Authorization(AuthType = AuthorizationType.JWT)]
     Task<ApiResult<Page<ProductModel>>> GetPageAsync(ProductQuery query);

     [Authorization(AuthType = AuthorizationType.JWT)]
     Task<ApiResult<List<ProductModel>>> GetProductByCondition(ProductQuery query);

     [Authorization(AuthType = AuthorizationType.JWT)]
     [ServiceCacheIntercept(CachingMethod.Remove, "GetProducts", CacheSectionType = "ddlCache", Mode = CacheTargetType.MemoryCache, EnableStageCache = true)]
     [ServiceLogIntercept]
     Task<ApiResult<bool>> DeleteById(List<int> ids);

     [Authorization(AuthType = AuthorizationType.JWT)]
     [ServiceCacheIntercept(CachingMethod.Remove, "GetProducts", CacheSectionType = "ddlCache", Mode = CacheTargetType.MemoryCache, EnableStageCache = true)]
     Task<ApiResult<bool>> Modify(ProductModel model);


     [Authorization(AuthType = AuthorizationType.JWT)]
     Task<ApiResult<bool>> Validate(ProductModel model);

     [Authorization(AuthType = AuthorizationType.JWT)]
     [ServiceCacheIntercept(CachingMethod.Remove, "GetProducts",  CacheSectionType = "ddlCache", Mode = CacheTargetType.MemoryCache, EnableStageCache = true)]
     Task<ApiResult<bool>> Stop(List<int> ids);

     [Authorization(AuthType = AuthorizationType.JWT)]
     [ServiceCacheIntercept(CachingMethod.Remove, "GetProducts", CacheSectionType = "ddlCache", Mode = CacheTargetType.MemoryCache, EnableStageCache = true)]
     Task<ApiResult<bool>> Open(List<int> ids);

     [Authorization(AuthType = AuthorizationType.JWT)]
     [ServiceCacheIntercept(CachingMethod.Get, Key = "GetProducts", CacheSectionType = "ddlCache", EnableL2Cache = false, Mode = CacheTargetType.MemoryCache, Time = 480, EnableStageCache = true)]
     Task<ApiResult<List<ProductModel>>> GetProducts();


 }

参数如果是非模型集合类型的参数,缓存key 会取第一个参数值,如果是模型参数就需要添加CacheKey特性,代码如下:

    public class PropertyThresholdQuery
    {
        [CacheKey(1)]
        public string PropertyCode {  get; set; }
        [CacheKey(2)]
        public string ProductCode { get; set; }
        [CacheKey(3)]
        public string DeviceCode { get; set; }
    }

四、服务管理

1.平台是支持服务路由管理,此项功能除了可以查看元数据,服务节点,服务规则外,还可以在权重轮询负载算法情况下,改变权重可以让更多的访问调用到此服务节点上,还有可以优雅的移除服务节点

选择权重轮询负载分流算法,代码如下:

    [ServiceBundle("api/{Service}/{Method}")]
    public interface ITestApiService:IServiceKey
    {
        // [Authorization(AuthType = AuthorizationType.JWT)]
        [Command(ShuntStrategy =AddressSelectorMode.RoundRobin)]
        public Task<string> SayHello(string name);
    }

以下是编辑权重

 

2. 热部署中间服务

 3. 黑白名单,添加IP地址或者IP段就能限制相关IP访问

 就比如访问api/testapi,结果如下:

 4.支持swagger API文档

 五、分布式链路追踪

支持skywalking 分布式链路追踪

 六 、构建发布

1. 微服务发布:

发布微服务的时候,需要引用的是微服务,不要引用stage, 如下图

 2. 网关发布, 引用服务接口和聚合服务(中间服务)模块,还有stage 模块

 

 

七、总结

 以上是木舟平台如何构建服务,平台定于11月20日发布1.0社区版本。也请大家到时候关注捧场。

标签:AuthType,Task,服务,木舟,起微,AuthorizationType,JWT,surging,Authorization
From: https://www.cnblogs.com/fanliang11/p/18541040

相关文章

  • 基于surging 的木舟平台如何通过Tcp或者UDP网络组件接入设备
    一、概述     上篇文章介绍了木舟通过HTTP网络组件接入设备,那么此篇文章将介绍如何利用Tcp或者UDP网络组件接入设备.     木舟(Kayak)是什么?      木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的,平台包含了微服务和物联网平台。支......
  • 基于surging 的木舟平台如何通过HTTP网络组件接入设备
    一、概述     上篇文章介绍了木舟如何上传模块热部署,那么此篇文章将介绍如何利用HTTP网络组件接入设备,那么有些人会问木舟又是什么,是什么架构为基础,能做什么呢?      木舟(Kayak)是什么?      木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行......
  • uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程
    前言Vue版本,请访问这篇文章。在uni-appH5网站平台开发中,详解微信公众号网页接入微信授权登录示例代码,附带申请测试公众号全流程及配置教程,提供前端h5页面公众号网页实现授权登陆并获取用户昵称头像数据的示例源码,用自己项目跑出来的本地局域网IP段就可以拉起公众......
  • 基于surging的木舟平台如何上传模块热部署
    一、概述      通过3个月的赶工,基本上快完成1.0版本的研发,将在下个月发布社区1.0版本。      木舟(Kayak)是什么?      木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的,平台包含了微服务和物联网平台。支持异步和响应式编程开发,功......
  • 基于surging 如何利用peerjs进行语音视频通话
    一、概述PeerJS是一个基于浏览器WebRTC功能实现的js功能包,简化了WebrRTC的开发过程,对底层的细节做了封装,直接调用API即可,再配合surging协议组件化从而做到稳定,高效可扩展的微服务,再利用RtmpToWebrtc引擎组件可以做到不仅可以利用httpflv观看rtmp推流直播,还可以采用基于W......
  • 利用surging.cli工具根据数据库表生成微服务
    一、概述为了弥补代码的遗失,木舟IOT平台正在加班加点进行研发,后面不只是针对于IOT设备接入上报,告警,视频管理,组态数据可视化大屏,后面还会有快速搭建微服务平台,利用surging.cli工具根据数据库表生成微服务,中间服务,能让程序员快速完成BOSS交给的任务,从而在这个内卷的社会能占有一......
  • 基于surging的木舟IOT平台如何添加网络组件
     一、概述         为了弥补代码的遗失,木舟IOT平台正在加班加点进行研发,后面不只是针对于IOT设备接入上报,告警,视频管理,组态数据可视化大屏,后面还会有快速搭建微服务平台,利用surging.cli工具根据数据库表生成微服务,中间服务,能让程序员快速完成BOSS交给的任务,从而在......
  • 基于surging的产品项目-木舟开源了!
      一、概述        因为前段时间电脑坏了,导致代码遗失,踌躇满志马上上线的平台产品付之东流,现在熬夜在写代码希望能尽快推出企业正常使用的平台产品,而这次把代码开源,一是让大家对surging使用有个深入的了解,二也是开源社区起到监督推动作用,底层的代码基本上已经完成......
  • 木舟0基础学习Java的第十九天(装饰设计模式,转换流,对象操作流(序列化),Properties集合)
    装饰设计模式创建一个接口用一个类实现接口再创建一个类实现这个接口第二个类中包含第一个类中的方法和自己的方法还可以增强案例:publicinterfaceCar{publicvoidrun();publicvoidcarry();}publicclassTaxiimplementsCar{@Overridepub......
  • 木舟0基础学习Java的第十八天(IO流,字节流,字符流,缓冲)
    IO流正常使用流程:1.抛异常 2.资源读写 3.关闭资源(从后往前关)字节流:(拷贝推荐使用)开发中一般不会抛出异常用try{}catch(){}也不推荐字节流读中文FileInputStream:读FileInputStreamfs=newFileInputStream("e:/b.txt");//11111111为-1的补......