Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群)
SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群。SmartRoute是通过消息订阅的机制实现服务与服务之间的通讯,它可以让广播网段内所有服务器上的应用自动构建通讯集群; 而通讯集群完全是SmartRoute自动构建并不需要进行任何配置或安装中间服务。通过这种全新的通讯开发方式可以让开发者更轻松和简单地构建基于服务的集群通讯应用。
SmartRoute的发展目标
智能集成服务通讯交互
不需要具备通讯专业知识即可轻松构建
零配置、零安装引用组件即可用
可快速构建服务应用通讯,消息分发,网关集群和集群负载应用
原理
SmartRoute基于UDP广播的方式来发现网内相同集群名称的服务应用,当然应用是基于同一集群名称的情况下,会发起TCP连接握手并进行验证,当验证通过后节点会建立的通讯关系。在同一集群里的任意一个节点产生的订阅都会同步到所有节点上。SmartRoute的网络节点是基于网状结构,并不需要中心服务维护,而这些特性都是自动化的开发人员完全不需要了解。
使用
SmartRoute的使用并不会像传统网络程序那样构建服务,然后构建Client连接到相应服务那样复杂。在SmartRoute中不存在服务和客户端这一说法,任何节点即是服务的同时也是客户端;SmartRoute的消息是通过订阅来处理,只要记住对方的名称就可以向对方发送消息,你并不需要关注对方是在那个节点或服务上。
构建订阅
SmartRoute默认会提供一个节点,主要是可以快速地构建通讯交互(如果怕和其他集群有冲突可以在打开默认节点之前修改一下它的Cluster和TokenKey)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Program { static long mCount; public static void Main( string [] args) { INode node = NodeFactory.Default; node.Loger.Type = LogType.ALL; node.AddLogHandler( new SmartRoute.ConsoleLogHandler(LogType.ALL)); node.Open(); EventSubscriber henry = node.Register<EventSubscriber>( "henry" ); henry.Register<User>(OnUser); henry.Register<Employee>(OnEmployees); Console.Read(); } private static void OnEmployees(Message msg, Employee emp) { System.Threading.Interlocked.Increment( ref mCount); msg.Reply(Employee.GetEmployee()); } private static void OnUser(Message msg, User user) { System.Threading.Interlocked.Increment( ref mCount); msg.Reply( new User { Name = "henry" }); } } |
以上代码是注册一个名称为Henry的订阅,并向这个订阅注册两个消息处理方法;henry接收到相关消息会自动地把消息路由到方法上,可以通过调用Message.Reply即可以向发送者返回一个响应消息。
订阅,发现和推送消息
接下来就构建别一个订阅,当发现henry这个订阅后向它发送一个消息;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class Program { static long mCount; public static void Main( string [] args) { INode node = NodeFactory.Default; node.Loger.Type = LogType.ALL; node.AddLogHandler( new SmartRoute.ConsoleLogHandler(LogType.ALL)); node.Open(); EventSubscriber ken = node.Register<EventSubscriber>( "ken" ); ken.Register<User>(OnUser); ken.Register<Employee>(OnEmployees); node.SubscriberRegisted = (n, s) => { if (s.Name == "henry" ) { ken.Publish( "henry" , Employee.GetEmployee()); } }; while ( true ) { Console.WriteLine(mCount); System.Threading.Thread.Sleep(1000); } Console.Read(); } private static void OnEmployees(Message msg, Employee emp) { System.Threading.Interlocked.Increment( ref mCount); msg.Reply(Employee.GetEmployee()); } private static void OnUser(Message msg, User user) { System.Threading.Interlocked.Increment( ref mCount); msg.Reply(Employee.GetEmployee()); } } |
订阅代码都基于一致,同样注册一个ken订阅并注册相应消息的处理方法。
总结
通过SmartRoute实现的通讯服务和传统的有很大差别,使用起来会变得更简单和透明。这种模式更像我们使用的MQ方式,但SmartRoute的特别之处是不需要任何中间服务支持即可以进行交互,这样可以让应用构建会更简单灵活。不过现有SmartRoute的应用局限性只适应用于内部网服务交互,订阅方式也比较单一,后期也会加入一下多路订阅功能以便更好的适应不同的应用情况。如果你对SmartRoute感兴趣可以关注这个项目
个人站:www.ikende.com
个人开源项目github.com/IKende
c#组件设计交流群:47164588
c# socket :136485198 微博http://weibo.com/ikende
Net Core开源通讯组件 SmartRoute的更多相关文章
- .Net Core开源通讯组件 SmartRoute(服务即集群)
SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群.SmartRoute是通过消息订阅的机制实现 ...
- 开源通讯组件ec
跨平台开源通讯组件elastic communication elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net ...
- 跨平台开源通讯组件elastic communication
elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.n ...
- .net core高性能通讯开源组件BeetleX
BeetleX beetleX是基于dotnet core实现的轻量级高性能的TCP通讯组件,使用方便.性能高效和安全可靠是组件设计的出发点!开发人员可以在Beetlx组件的支持下快带地构建高性能的T ...
- [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了
有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端
一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开 ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之目录结构
一个技术汪的开源梦 —— 目录 这篇文章是开源公共组件的开篇那就先说说项目的 Github 目录结构和 .Net Core 的项目结构. 1. GitHub 目录结构和相关文件 - src 源码项目目 ...
- 突破自我,开源NetWorkSocket通讯组件
前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...
- 开源NetWorkSocket通讯组件
开源NetWorkSocket通讯组件 前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经 ...
随机推荐
- asp连接SQL数据库的代码
connstr="driver={SQL Server};server=(local);uid=sa;pwd=sa;database=Your database" 语法介绍: 1. ...
- FFT结果的物理意义
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低:而对 于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈 ...
- UIView总结---对UIView头文件中的大部分信息进行中文注释
@interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> ...
- 20141009---Visual Studio 2012 预定义数据类型
预定义数据类型 一.值类型 整型:(整数) 有符号整型和无符号整形,区别是有符号的有负数无符号的都是正数, 2x+1 常用int 有符号: 带有正负数,范围为按所写依次增大 ...
- UI2_UISwitch与UIActivity
// // ViewController.m // UI2_UISwitch与UIActivity // // Created by zhangxueming on 15/7/7. // Copyri ...
- 8款效果惊艳的HTML5 3D动画
1.HTML5 WebGL水面水波荡漾特效 之前已经向各位分享过一款很逼真的HTML5水波荡漾特效,效果还算不错.今天再向大家分享一款更加给力的HTML5水波动画,画面上是一个大水池,水池底部是一颗大 ...
- Java线程面试题 Top 50(转载)
原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的 ...
- hidden(隐藏域)
<input type="hidden">? 这等于是隐藏值,客户端无需显示,但提交后后台能够接受,例如你放个表单验证值在里边,这样可以拒绝来源不明的表单提交.还有判断 ...
- Qt获得网页源码
1.工程中添加网络模块 打开你的.pro文件插入以下代码 QT += network 2.添加代码 CodeQString NetWork::getWebSource(QUrl url) { QNet ...
- SDRAM控制器
1 初始化以及load mode 寄存器1 初始化以及load mode 寄存器 2 时间表 这里会有几个重要的时间周期: 3 AUTO REFRESH (自动刷新) 4 CAS(CL delay) ...