基于.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、外部如何交互
服务主要针对提交的数据进行处理,在单个服务或多个服务调用的问题上,采取使用网关统一访问的形式进行处理,如下图所示
网关包括以下功能:
- 安全身份认证
- 统一访问
- 流量控制
- 分流控制
- 数据监控
- 缓存拦截
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 CORE微服务框架 -浅析如何使用surging的更多相关文章
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- 基于.NET CORE微服务框架 -谈谈surging API网关
1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...
- 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...
- 基于.NET CORE微服务框架 -Api网关服务管理
1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...
- 基于.NET CORE微服务框架 -surging 基于messagepack、protobuffer、json.net 性能对比
1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...
- 基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化
1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
- 基于Spring-Cloud的微服务框架设计
基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
随机推荐
- Hibernate第三篇【主配置文件、映射文件、复合主键映射】
前言 目前已经学了如何搭建Hibernate的开发环境,以及Hibernate对应的API了-在快速入门还没讲解的就是配置文件是怎么配置的.因此,本博文主要讲解主配置文件以及映射配置文件.. 主配置文 ...
- linux(3)磁盘与文件系统管理/查看硬盘、内存空间/文件系统的操作/ 文件的压缩和打包
一.磁盘与文件系统管理 1.分区与文件系统分区:记录每一个分区的开始柱面和结束柱面主引导区(master boot recorder):记录分区的数据,记录硬盘里所有的分区信息分区划分好后,要将分区格 ...
- 手機Web頁面信息
手機瀏覽器的寬度為980px: 使用980px寫頁面時,若是遇到字體變大情況,是因為block或者inline-block沒有設置寬高.設置即顯示正常. 980px設計,禁止手機頁面縮放: <m ...
- C++临时对象以及针对其进行的优化
C++临时对象以及针对其进行的优化 C++中真正的临时对象是看不见的,它们不出现在你的源代码中. 那么什么时候回产生临时对象呢?主要是三个时刻: 产生临时对象的三个时刻: 用构造函数作为隐式类型转换函 ...
- Oracle 每隔5分钟产生2个clsc*.log文件
环境: OS:HP-UNIX 数据库:11.2.0.4 双机RAC (一)现象 在清理Oracle日志的时候,发现在$ORACLE_HOME/log/{instance_id}/client下面存 ...
- Spring框架(二)
Spring反射机制: 1, 通过spring来获取一个对象的实例 <bean id="user" class="com.model.User"> ...
- 【转】elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
- 简单说明CGI是什么
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- Stochastic Gradient Descent
一.从Multinomial Logistic模型说起 1.Multinomial Logistic 令为维输入向量; 为输出label;(一共k类); 为模型参数向量: Multinomial Lo ...
- POJ 2472 106 miles to Chicago(Dijstra变形——史上最坑的最长路问题)
题目链接 :http://poj.org/problem?id=2472 Description In the movie "Blues Brothers", the orphan ...