基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

本文介绍了开源的.NET CORE微服务框架Surging,包括其作为RPC协议的分布式服务框架特性,依赖Netty的异步通信,Zookeeper服务注册中心,负载均衡策略等。文中还给出了简单的服务提供者和客户端示例,并分享了初步的性能测试结果。
摘要由CSDN通过智能技术生成

一、前言

        至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知。随着岁月的成长,技术也从原来的三层设计到现在的领域驱动设计,从原来的关系型数据库SQL 2000到现在的NOSQL (mongodb,couchbase,redis),从原来基于SOAP协议的web service到现在基于restful 协议的web api,wcf,再到现在rpc微服务。技术的成长也带来岁月的痕迹。

        现在微软又出了.NET CORE,为了紧跟微软的步伐,研究了将近1年,从中看了不少开源代码,如NetEscapades.Configuration,eShopOnContainers,rabbit.RPC等等,从中学到了不少知识,后面利用所学加上自己的想法,开发出分布式微服务框架surging。开源地址:https://github.com/fanliang11/surging。下面会以三篇文章的形式介绍

surging

1.基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

2.剥析surging的架构思想

3.后续surging的架构完善工作

二、什么是surging

surging从中文译义来说,冲击,汹涌,也可以翻译成风起云涌。我所希望的是.net core 能成为i最流行的技术。

surging从技术层面来说就是基于RPC协议的分布式微服务技术框架,框架依赖于Netty 进行异步通信,采用Zookeeper作为服务注册中心,集成了哈希,随机和轮询作为负载均衡算法

1.服务化应用基本框架

框架的执行过程如下:

1.服务提供者启动,根据RPC协议通过配置的IP和port绑定到netty上

2.注册服务信息存储至Zookeeper

3.客户端CreateProxy调用服务时,从内存中拿到上次通知的所有效的服务地址,根据路由信息和负载均衡机制选择最终调用的服务地址,发起调用

2.简单示例

  创建IModuleServices

   IUserService.cs:


[ServiceBundle]   //服务标记
   public  interface  IUserService
   {
       Task< string > GetUserName( int  id);
 
       Task< bool > Exists( int  id);
 
       Task< int >  GetUserId( string  userName);
 
       Task<DateTime> GetUserLastSignInTime( int  id);
 
       Task<UserModel> GetUser( int  id);
 
       Task< bool > Update( int  id, UserModel model);
 
       Task<IDictionary< string string >> GetDictionary();
      
       Task TryThrowException();
   }

 创建领域对象

 UserModel:


[ProtoContract]
  public  class  UserModel
  {
      [ProtoMember(1)]
      public  string  Name {  get set ; }
 
      [ProtoMember(2)]
      public  int  Age {  get set ; }
  }

 

 AssemblyInfo.cs,扩展AssemblyModuleType来标识模块,根据AssemblyModuleType进行相关规则的反射注册


[assembly: AssemblyTitle( "Surging.IModuleServices.Common" )]
[assembly: AssemblyDescription( "业务模块接口" )]
[assembly: AssemblyModuleType(ModuleType.InterFaceService)]
 
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid( "2103624d-2bc2-4164-9aa5-1408daed9dee" )]

 

创建Domain Service

PersonService.cs


[ModuleName( "Person" )]   //标识实例化名称
     public  class  PersonService : ServiceBase,IUserService
     {
         #region Implementation of IUserService
         private  readonly  UserRepository _repository;
         public  PersonService(UserRepository repository)
         {
             this ._repository = repository;
         }
         
         public  Task< string > GetUserName( int  id)
         {
             return  GetService<IUserService>( "User" ).GetUserName(id);
         }
 
         public  Task< bool > Exists( int  id)
         {
             return  Task.FromResult( true );
         }
 
         public  Task< int > GetUserId( string  userName)
         {
             return  Task.FromResult(1);
         }
 
         public  Task<DateTime> GetUserLastSignInTime( int  id)
         {
             return  Task.FromResult(DateTime.Now);
         }
 
         public  Task<UserModel> GetUser( int  id)
         {
             return  Task.FromResult( new  UserModel
             {
                 Name =  "fanly" ,
                 Age = 18
             });
         }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值