随着应用规模的增长服务则需要扩展集群休部署,在集群化部署过程首先要考虑服务负载处理的问题,在实现应用场中有很多集群化的负载方式,如网络通讯层面的LVS,HTTP应用协议层面的nginx.然而这些负载都依赖于中心化服务,而SmartRoute的设计理念是去除中心化来实现应用层集群负载处理;而SmartRoute的服务定义和应用调用都不需要明确服务地址和端口,这样使用服务设计实现更灵活。接下来介绍一下如何通过SmartRoute简单实现一个服务集群负载应用。

定义节点

       SmartRoute的设计其实服务和client一说,所有实例都是一个节点,所有实例节点即充当服务的同时也是客户端。在应用中开启一个节点实例是一件非常简单的事情。

    Route.DefaultNode.Open();

        只需要一句话就可以打开一个节点,定义者不需要设置服务的地址和端,因为SmartRoute的设计原则是零配置的通讯服务原则。

添加订阅

        SmartRoute通讯不存在服务和客户端一说,只有订阅和向订阅生产消息。只要在一个节点上添加订阅,那相关订阅会自动同步到不同服务的节点上。

 mSwitch = new SubscribeSwitch();
            mSwitch.GetServiceSubscribe(Service.REGISTER).RegisterProcess<Register>((o, e) =>
            {
                e.Data.Completed = true;
                e.Data.RegisterTime = DateTime.Now;
                e.Reply(e.Data);
            });


         以上是注册一个REGISTER的订阅,并注册一个处理Register消息的处理过程,并返回相应的处理结果。

生产请求

                    Register reg = new Register { Name = "henry", EMail = "henryfan@msn.com", PassWord = "123456" };
                    reg = mSwitch.Send<Register>(Service.REGISTER, reg);

        请求处理并不需要关心具体的服务通讯地址,只需要明确具体的服务名称即可以完成,在整个过程中开发者都不需要关心服务通讯方面的东西,只需要关注订阅服务名即可以进行通讯。

运行结果

        

        只要运行相关程序,那就会自动构建节点进行相关通讯处理。

集群负载处理

        无配置集群是smartroute的主要功能点,不过是订阅都或生产运行多份就会组成集群负载通讯交互。

        


        只结运行多个订阅实例,那相关节点就会自动发现,生产者也会自动地把请求负载到不同的订阅者中。

总结

        smartroute是采用自动发现服务机制进行设计,所以在整个通讯环节中开发者并不需要关心服务的定义和运行。在设计通讯交互过程只需要关注订阅者的名称即可,这可以让开发者在编写通讯应用的进修变更简单和灵活。

下载示例


关注微信公众号