基于.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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++描述杭电OJ 2016.数据的交换输出 ||

C描述杭电OJ 2016.数据的交换输出 || Problem Description 输入n(n<100)个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数。 Input 输入数据有多组&#xff0c;每组占一行&#xff0c;每行的开始是一个整数n&#xff0c;表示这个测试实例的…

2019年这50个Kafka面试题,你知道答案么

转载自 2019年这50个Kafka面试题&#xff0c;你知道答案么 Apache Kafka对于新手的面试问题&#xff1a;41, 42, 43, 44, 45, 47, 49 Apache Kafka对于有经验的人的面试问题&#xff1a;46, 48 Apache Kafka的受欢迎程度很高&#xff0c;Kafka拥有充足的就业机会和职业前景…

聊天系统

显示所有的信息 chat.html <!DOCTYPE html><html> <head> <meta charset"UTF-8"><title></title><style>#button1{background:skyblue;border-radius:20px;width:100px;}</style><script>function showmess…

jzoj3058-火炬手【高精度,暴力】

正题 题目大意 对于一个nnn&#xff0c;求一个mmm&#xff0c;使得n∗mn*mn∗m只有0或1 解题思路 暴力枚举n∗mn*mn∗m&#xff0c;然后高精度求答案。 codecodecode #include<cstdio> #include<cmath> #define ll long long using namespace std; ll n,xans; i…

使用Visual Studio Code 开发.NET Core应用程序

开源和跨平台开发是Microsoft 的当前和将来至关重要的策略。.NET Core已开源&#xff0c;同时开发了其他项来使用和支持新的跨平台策略。.NET Core2.0 目前已经发布&#xff0c;是适用于针对 Web 和云构建跨平台应用程序的最新开源技术&#xff0c;可在 Linux、Mac OS X 和Wind…

C++描述杭电OJ 2018.母牛的故事 ||

C描述杭电OJ 2018.母牛的故事 || Problem Description 有一头母牛&#xff0c;它每年年初生一头小母牛。每头小母牛从第四个年头开始&#xff0c;每年年初也生一头小母牛。请编程实现在第n年的时候&#xff0c;共有多少头母牛&#xff1f; Input 输入数据由多个测试实例组成…

Kafka面试题与答案全套整理

转载自 Kafka面试题与答案全套整理 1. Kafka的用途有哪些&#xff1f;使用场景如何&#xff1f; 总结下来就几个字:异步处理、日常系统解耦、削峰、提速、广播 如果再说具体一点例如:消息,网站活动追踪,监测指标,日志聚合,流处理,事件采集,提交日志等 2. Kafka中的ISR、AR又…

jzoj3059-雕塑【容斥,数论】

正题 题目大意 n∗nn*nn∗n的矩阵&#xff0c;要求放nnn个雕塑&#xff0c;要求每行每列都只有一个雕塑&#xff0c;且不可以放在障碍物上。求方案总数。 解题思路 首先没有障碍物答案就是n!n!n!。 之后障碍物很少&#xff0c;考虑容斥。 设fif_ifi​为选iii个障碍物且这些障…

Julia女神告诉我任何一家企业本质上都是一家软件公司

微软技术大会今天进入高潮&#xff0c;潘正磊女神发表题为“开发者在数字化转型中的关键价值”的主题演讲&#xff0c;积极评价开发者在各行业数字化转型中扮演的关键角色&#xff1b; 女神潘正磊表示&#xff1a;“由技术创新引领的数字化转型给全球各行业带来了巨大的变革和机…

C++描述杭电OJ 2020.绝对值排序 ||

C描述杭电OJ 2020.绝对值排序 || Problem Description 输入n(n<100)个整数&#xff0c;按照绝对值从大到小排序后输出。题目保证对于每一个测试实例&#xff0c;所有的数的绝对值都不相等。 Input 输入数据有多组&#xff0c;每组占一行&#xff0c;每行的第一个数字为n…

P3391-[模板]文艺平衡树【Splay】

正题 题目连接:https://www.luogu.org/problemnew/show/P3391 题目大意 一个序列&#xff0c;m个操作翻转[l..r][l..r][l..r]区间。求最终序列 解题思路 节点维护编号&#xff0c;然后答案就是中序遍历。然后翻转的话我们先考虑一个性质。 若这是初始状态(l-1和r1反了) 然后…

响应式布局(手机端)

禁止手机页面放大缩小 <meta name"viewport" content"widthdevice-width,minimum-scale1.0,maximum-scale1.0,user-scalableno" />media screen and(max-width: 750px){} <!DOCTYPE html> <html> <head><title></title…

Hadoop入门(三)HDFS API

一、、HDFS 常用类 Configuration 配置 Path 路径 FileSystem 文件系统 Stream 流 IOUtils IO工具 API文档 二、类解析 &#xff08;1&#xff09;Configuration 配置文件加载顺序 设置/获取参数方法 &#xff08;2&#xff09;Path Path 常用方法 &#xff08;3&…

在XUnit中用Moq怎样模拟EntityFramework Core下的DbSet

最近在做一个项目的单元测试时&#xff0c;遇到了些问题&#xff0c;解决后&#xff0c;觉得有必要记下来&#xff0c;并分享给需要的人&#xff0c;先简单说一下项目技术框架背景&#xff1a; asp.net core 2.0(for .net core)框架 用Entity Framework Core作ORM XUnit作单元…

idea中pom.xml文件横线解决办法

解决方案&#xff1a; file >>> settings >>> Build,Execution,Deployment >>> Build Tools >>> Maven >>> Ignored Files 右边带勾的取消&#xff0c;然后应用即可&#xff01;

P1311,jzoj3025-选择客栈【统计】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1311 题目大意 如果两个客栈是同样颜色且中间有客栈消费不超过p那么久算为一种方案&#xff0c;求方案总数 解题思路 先枚举颜色&#xff0c;然后枚举右边的&#xff0c;对于左边&#xff0c;记录两…

解决idea中xml文件报红问题

报错截图&#xff1a; 解决方法&#xff1a; 复制爆红的约束链接file >>> settings >>> Languages & Frameworks >>> Schemas and DTDs右边框中找到 Ignored schemas and DTD3:点击加号添加约束&#xff0c;如下图应用即可&#xff01;

Hadoop入门(四)HDFS编程

一、编程环境设置 编程使用到idea2018&#xff0c;maven &#xff08;1&#xff09;启动集群 在window上启动vmware软件的虚拟机hadoop01&#xff0c;hadoop02&#xff0c;hadoop03。 进入hadoop01虚拟机启动集群&#xff0c;执行命令 start-dfs.sh &#xff08;2&#x…

ASP.NET Core 认证与授权[4]:JwtBearer认证

Bearer认证 HTTP提供了一套标准的身份验证框架&#xff1a;服务器可以用来针对客户端的请求发送质询(challenge)&#xff0c;客户端根据质询提供身份验证凭证。质询与应答的工作流程如下&#xff1a;服务器端向客户端返回401&#xff08;Unauthorized&#xff0c;未授权&#x…

P1314,jzoj3028-聪明的质监员【二分答案,前缀和】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1314 题目大意 有nnn个石头&#xff0c;mmm个区间&#xff0c;对于每个WWW有一个YYY。 Y∑i0n((∑jliri(wi>w)∗vi)∗(∑jliri(wi>w)))Y\sum_{i0}^n((\sum_{jl_i}^{r_i}(w_i>w)*v_i)*(\sum_…