SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群。SmartRoute是通过消息订阅的机制实现服务与服务之间的通讯,它可以让广播网段内所有服务器上的应用自动构建通讯集群; 而通讯集群完全是SmartRoute自动构建并不需要进行任何配置或安装中间服务。通过这种全新的通讯开发方式可以让开发者更轻松和简单地构建基于服务的集群通讯应用。

SmartRoute的发展目标

 

智能集成服务通讯交互

不需要具备通讯专业知识即可轻松构建

零配置、零安装引用组件即可用

可快速构建服务应用通讯,消息分发,网关集群和集群负载应用

原理

SmartRoute基于UDP广播的方式来发现网内相同集群名称的服务应用,当然应用是基于同一集群名称的情况下,会发起TCP连接握手并进行验证,当验证通过后节点会建立的通讯关系。在同一集群里的任意一个节点产生的订阅都会同步到所有节点上。SmartRoute的网络节点是基于网状结构,并不需要中心服务维护,而这些特性都是自动化的开发人员完全不需要了解。

使用

SmartRoute的使用并不会像传统网络程序那样构建服务,然后构建Client连接到相应服务那样复杂。在SmartRoute中不存在服务和客户端这一说法,任何节点即是服务的同时也是客户端;SmartRoute的消息是通过订阅来处理,只要记住对方的名称就可以向对方发送消息,你并不需要关注对方是在那个节点或服务上。

构建订阅

SmartRoute默认会提供一个节点,主要是可以快速地构建通讯交互(如果怕和其他集群有冲突可以在打开默认节点之前修改一下它的Cluster和TokenKey)。

    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这个订阅后向它发送一个消息;

    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感兴趣可以关注这个项目

https://github.com/IKende/SmartRoute

.Net Core开源通讯组件 SmartRoute(服务即集群)的更多相关文章

  1. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

  2. 开源通讯组件ec

    跨平台开源通讯组件elastic communication elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net ...

  3. 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

    分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...

  4. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  5. 一片非常有趣的文章 三分钟读懂TT猫分布式、微服务和集群之路

    原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分钟读懂TT猫分布式.微服务和集群之路   针对新手入门的普及,有过大型网站技 ...

  6. 搜索服务Solr集群搭建 使用ZooKeeper作为代理层

    上篇文章搭建了zookeeper集群 那好,今天就可以搭建solr搜服服务的集群了,这个和redis 集群不同,是需要zk管理的,作为一个代理层 安装四个tomcat,修改其端口号不能冲突.8080~ ...

  7. 分布式协调服务Zookeeper集群之ACL篇

    分布式协调服务Zookeeper集群之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper ACL相关知识概览 1>.zookeeper官方文档(h ...

  8. 小D课堂 - 新版本微服务springcloud+Docker教程_6-06 zuul微服务网关集群搭建

    笔记 6.Zuul微服务网关集群搭建     简介:微服务网关Zull集群搭建 1.nginx+lvs+keepalive      https://www.cnblogs.com/liuyisai/ ...

  9. 跨平台开源通讯组件elastic communication

    elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.n ...

随机推荐

  1. Nginx:针对IPv4的内核参数优化

    这里提及的参数是和IPv4网络有关的linux内核参数,我们可以将这些内核参数的值追加到linux系统的/etc/sysctl.conf文件中,然后使用如下命令使修改生效: [root@bogon ~ ...

  2. (原创)通用查询实现方案(可用于DDD)[附源码] -- 简介

    [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html).   [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...

  3. OPENWRT开始SFTP支持办法

    root@OpenWrt:~# opkg update root@OpenWrt:~# opkg install vsftpd openssh-sftp-server root@OpenWrt:~# ...

  4. [python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片

    从在知乎关注了几个大神,我发现我知乎的主页画风突变.经常会出现 ***长得好看是怎样一种体验呢? 不用***,却长得好看是一种怎样的体验? 什么样***作为头像? ... 诸如此类的问答.点进去之后发 ...

  5. SQL 重置自增列的值 批量处理

    Declare @IdentityTable sysname, @IdentityColumn sysname, @TotalRows int, @i int, @Iden int, @Sql var ...

  6. 修改win7电脑中所有文件的默认查看方式

    怎么修改win7电脑中所有文件的默认查看方式   如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...

  7. C# 微信v3退款

    1.退款需要退款证书.C#都是用p12的证书,双击证书导入,密码是mch_id(商户号) 2.调用微信退款接口进行退款操作 string resp=string.Empty string cert = ...

  8. BZOJ4350: 括号序列再战猪猪侠

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...

  9. sicily 1007. To and Fro 2016 11 02

    // Problem#: 1007// Submission#: 4893204// The source code is licensed under Creative Commons Attrib ...

  10. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...