基于 Dotnet Core 的服务通讯组件 SmartRoute

未知
C#
跨平台
2016-11-08
泥水佬

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

加载中

评论(2)

冬天之雪
冬天之雪
Dotnet Core原来.net core还有这种叫法
全是经历
全是经历
为何我用VS2015打不开呢?无法加载呢?

暂无资讯

暂无问答

消息智能路由组件SmartRoute

消息传递在软件开发过程中是一件很常见的事情,而在不同的场景所使用消息传递方式也有所不同,在对象之间制定相关接口方法和对象结构,对于进程之间可能使用内存共享或一些通讯产品,在不同服务器...

2015/08/17 15:57
216
0
SmartRoute应用-helloWorld示例

本章主要是通过helloWorld来介绍SmartRoute组件的使用,SmartRoute和一般的通讯组件使用方式用点差别,使用方式主要强调就用零配置和零安装即可用.在传统通讯应用中需要开启服务端然后由另一方...

2015/08/24 12:09
190
0
smartroute集成聊天通讯集群

在制定一个规模比较多大的聊天应用时,往往需要制定部署多个应用服务,其一可以保障服务的可靠性,其二可以增加用户负载量.但制定这样一种应用体系是一件复杂的事情,毕竟同一群体的用户实际上会...

2015/08/26 21:59
443
0
.Net Core开源通讯组件 SmartRoute(服务即集群)

SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群。SmartRoute是通过消息订阅的机制实现服务与服务之间的通讯...

2016/11/08 17:56
160
1
SmartRoute零配置零安装实现分布式负载应用

随着应用规模的增长服务则需要扩展集群休部署,在集群化部署过程首先要考虑服务负载处理的问题,在实现应用场中有很多集群化的负载方式,如网络通讯层面的LVS,HTTP应用协议层面的nginx.然而这...

2016/01/14 14:42
237
1

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部