SmartRoute

基于 Dotnet Core 的服务通讯组件
授权协议 未知
开发语言 C#
所属分类 服务器软件、 电话/通讯/IM聊天
软件类型 开源软件
地区 国产
投 递 者 景书
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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

 相关资料
  • 本文向大家介绍PHP基于socket实现客户端和服务端通讯功能,包括了PHP基于socket实现客户端和服务端通讯功能的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍了PHP基于socket实现的简单客户端和服务端通讯功能,可实现服务端接收客户端发送的字符串进行翻转操作后返回客户端的功能,需要的朋友可以参考下 服务端: 客户端: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多

  • 我一直在读关于微服务和事件来源的文章,以及它是如何将服务从另一个服务中分离出来的。有两个概念我不清楚。首先,如果在微服务体系结构中,每个服务都可以独立开发,我们如何解释服务间的通信依赖? 例如,如果服务A和服务B需要通信,那么A需要将一个事件发送到一个中央总线,而B需要监听该事件并根据该事件采取行动,但这似乎会产生很多依赖关系。现在,如果我正在开发服务B,我需要知道服务A可以生成的所有事件。此外,

  • braft并不能直接被任何client访问, 本文主要是说明一个能访问braft节点的client需要那些要素。 Example client side code of Counter 总体流程 要访问braft的主节点,需要做这么一些事情: 需要知道这个复制组有哪些节点, 这个可以通过配置列表,记录在dns,或者提供某些naming service如集群的master,redis, zookee

  • braft 本身并不提供server功能, 你可以将braft集成到包括brpc在内的任意编程框架中,本文主要是阐述如何在分布式Server中使用braft来构建高可用系统。具体业务如何实现一个Server,本文不在展开。 Example server-side code of Counter 注册并且启动Server braft需要运行在具体的brpc server里面你可以让braft和你的业

  • 主要内容:基于 xinetd 服务的启动,基于xientd 服务的自启动本节学习基于 xinetd 服务的管理方法。基于 xinetd 的服务同样有启动管理和自启动管理之分,而且不管是启动管理还是自启动管理,都只有一种方法,相比独立的服务简单一些。 基于 xinetd 服务的启动 基于 xinetd 的服务没有自己独立的启动脚本程序,是需要依赖 xinetd 的启动脚本来启动的。xinetd 本身是独立的服务,所以 xinetd 服务自己的启动方法和独立服务的启动方法