• 基于.NET CORE微服务框架 -浅析如何使用surging


    1、前言

          surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人的开源项目,无法与成熟的开源社区的项目相比,也只有等到后面有许许多多志同道合的朋友加入一起研发完善surging,这样才能让surging 成为流行的微服务框架。

    这篇文章介绍如何使用surging

    开源地址:https://github.com/dotnetcore/surging

    2、设计模式

    Surging 提供了以下四种设计模式

    2.1  代理模式

    通过代理调用不同的微服务。并且针对于规则控制其访问,如下图所示:

     640?wx_fmt=png&wxfrom=5&wx_lazy=1

    2.2 异步消息模式

    再处理等待而阻塞的问题时候, 基于微服务的架构会选择使用消息队列来代替请求/响应模式,如下图所示:

    0?wx_fmt=png

    2.3 链式模式

    这种模式在接收到请求后会进行互相合并的响应,如下图所示:

    服务A接收到请求后会与服务B进行通信,服务B会同服务C进行通信。所有服务之间的通信使用基于Netty的RPC通信。

    0?wx_fmt=png

    2.4  分支模式

    这种模式允许调用多个服务提供者,来合并数据进行返回,如下图所示:

    0?wx_fmt=png

    3、外部如何交互

    服务主要针对提交的数据进行处理,在单个服务或多个服务调用的问题上,采取使用网关统一访问的形式进行处理,如下图所示

     0?wx_fmt=png

    网关包括以下功能:

    1. 安全身份认证

    2. 统一访问

    3. 流量控制

    4. 分流控制

    5. 数据监控

    6. 缓存拦截

    2.简单示例

    服务端

     
    var host = new ServiceHostBuilder()
                   .RegisterServices(option=> {
                       option.Initialize(); //初始化服务
                       option.RegisterServices();//依赖注入领域服务
                       option.RegisterRepositories();//依赖注入仓储
                       option.RegisterModules();//依赖注入第三方模块
                       option.RegisterServiceBus();//依赖注入ServiceBus
                   })
                   .RegisterServices(builder =>
                   {
                       builder.AddMicroService(option =>
                       {
                           option.AddServiceRuntime();//
                           // option.UseZooKeeperManager(new ConfigInfo("127.0.0.1:2181")); //使用Zookeeper管理
                           option.UseConsulManager(new ConfigInfo("127.0.0.1:8500"));//使用Consul管理
                           option.UseDotNettyTransport();//使用Netty传输
                           option.UseRabbitMQTransport();//使用rabbitmq 传输
                           option.AddRabbitMQAdapt();//基于rabbitmq的消费的服务适配
                           builder.Register(p => new CPlatformContainer(ServiceLocator.Current));//初始化注入容器
                       });
                   })
                   .SubscribeAt()     //消息订阅
                   .UseServer("127.0.0.1", 98)
                 //.UseServer("127.0.0.1", 98,“true”) //自动生成Token
                 //.UseServer("127.0.0.1", 98,“123456789”) //固定密码Token
                   .UseStartup<Startup>()
                   .Build();
                    
               using (host.Run())
               {
                   Console.WriteLine($"服务端启动成功,{DateTime.Now}。");
               }


    服务路由访问配置

    在接口上,添加以下特性(还未实现统一方法配置)

       [ServiceBundle("api/{Service}")]

    服务创建代理调用 (需要依赖接口创建代理)

    ServiceLocator.GetService<IServiceProxyFactory>().CreateProxy<T>(key)

     

    服务根据RoutePath 进行调用(不需要依赖接口,耦合性低)

     
    ServiceLocator.GetService<IServiceProxyProvider>().Invoke<string>(model, path, serviceKey)

     

    本地模块和服务调用

    ServiceLocator.GetService<T>(key)

    通过以上配置,可以通过网关进行访问,如果我们要访问接口IUserService ,方法为GetUser,路由映射的规则[ServiceBundle("api/{Service}/{Method}")],所转化地址应该是api/User/GetUser,

    用Postman测试的效果如下:

    0?wx_fmt=png

    4. 总结

    surging外部通过Api 网关 Rest 访问,内部通过netty RPC访问,surging还在不断完善中,帮助文档也正在赶工中,请大家耐心等待。如感兴趣请多关注或者加入QQ群:615562965

    原文地址:http://www.cnblogs.com/fanliang11/p/7766955.html


    .NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

    640?wx_fmt=jpeg

  • 相关阅读:
    2020十一届蓝桥杯-七月省赛题解
    ES6 Generator与C#迭代器
    .NET Core微服务部分知识点
    js点击图片传给一个空的div内放大显示
    Jmeter 中 CSV 如何参数化测试数据并实现自动断言
    安装nvidia-docker2报错E: Unable to locate package nvidia-docker2
    微信小程序-点击事件传递参数
    2020牛客暑期多校训练营(第八场)I Interesting Computer Game K Kabaleo Lite
    Count the Colors
    Basic Gcd Problem
  • 原文地址:https://www.cnblogs.com/webenh/p/11232738.html
Copyright © 2020-2023  润新知