zoukankan      html  css  js  c++  java
  • 基于.NET CORE微服务框架 -浅析如何使用surging

    1、前言

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

    这篇文章介绍如何使用surging

     

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

    2、设计模式

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

    2.1  代理模式

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

     

    2.2 异步消息模式

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

    2.3 链式模式

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

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

    2.4  分支模式

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

    3、外部如何交互

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

     

    网关包括以下功能:

    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测试的效果如下:

    4. 总结

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

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/fanliang11/p/7766955.html
Copyright © 2011-2022 走看看