文档章节

SmartRoute应用-helloWorld示例

泥水佬
 泥水佬
发布于 2015/08/24 12:09
字数 615
阅读 178
收藏 1

        本章主要是通过helloWorld来介绍SmartRoute组件的使用,SmartRoute和一般的通讯组件使用方式用点差别,使用方式主要强调就用零配置和零安装即可用.在传统通讯应用中需要开启服务端然后由另一方连接然后进行消息交互;而在SmartRoute中则以消息订阅和投递进行消息交互,所以在使用SmartRoute的时候只需要关注两件事情:以那个资源ID进行消息订阅和需要向那个资源ID发送消息.

        接下来通过一个helloWorld的示例来详解SmartRoute的使用.

初始化组件

        既然组件强调的是零配置和零安装,组件初始化自然就是一件简单的事情.不过在使用组件前需要引用两个DLL:SmartRoute.DLL和Newtonsoft.Json.DLL.接下来需要做的就是一行代码的事情.

Route.AddLogHandler(new ConsoleLogHandler(LogType.DEBUG | LogType.ERROR | LogType.FATAL | LogType.INFO | LogType.NONE | LogType.WARN));
            Route.DefaultNode.Open();

        通过Route.DefaultNode.Open()打开默认节点

订阅消息

        组件提供SubscribeEvent对象来订阅消息

ken = new SubscribeEvent("ken");

        使用对象构建一个订阅的时候必须给一个唯一标识,确保在整个群集中是唯一的.如果同一ID在不同服务中订阅,那集群在投递的时候就会选择最后一次注册.

        注册后可以针对订阅对象制一系列的消息路由方法.

henry = new SubscribeEvent("henry");
            henry.RegisterProcess<Hello>((o, e) =>
            {
                Console.WriteLine(e.Message.GetBody<Hello>().Content);
                e.Result = e.Message.Reply(new Hello { Content = "I'm fine!" });
            });

        以上是henry订阅只要接收到的消息是Hello对象,则执行相应的方法.

投递消息

        订阅对象提供几种消息投递方式,分别是:投递后不需要获取返回结果,投递后结果异步方法调用和投递后获取返回结果.

Hello hello = new Hello { Content = "hello henry! how are you?" };
                IMessage message = ken.Get("henry", hello);
                if (message != null)
                    Console.WriteLine(message.GetBody<Hello>().Content);

        以上是向henry发送一个hello的消息.

示例Request完整代码

namespace SmartRoute.HelloRequest
{
    class Program
    {
        static SubscribeEvent ken;
        static void Main(string[] args)
        {
            Route.AddLogHandler(new ConsoleLogHandler(LogType.DEBUG |
                LogType.ERROR | LogType.FATAL | LogType.INFO |
                LogType.NONE | LogType.WARN));
            Route.DefaultNode.Open();
            ken = new SubscribeEvent("ken");
            while (true)
            {
                Hello hello = new Hello { Content = "hello henry! how are you?" };
                IMessage message = ken.Get("henry", hello);
                if (message != null)
                    Console.WriteLine(message.GetBody<Hello>().Content);
                System.Threading.Thread.Sleep(1000);
            }
        }
    }
}

示例Response完整代码

namespace SmartRoute.HelloResponse
{
    class Program
    {
        static SubscribeEvent henry;
        static void Main(string[] args)
        {
            Route.AddLogHandler(new ConsoleLogHandler(LogType.DEBUG | 
                LogType.ERROR | LogType.FATAL | LogType.INFO | 
                LogType.NONE | LogType.WARN));
            Route.DefaultNode.Open();
            henry = new SubscribeEvent("henry");
            henry.RegisterProcess<Hello>((o, e) =>
            {
                Console.WriteLine(e.Message.GetBody<Hello>().Content);
                e.Result = e.Message.Reply(new Hello { Content = "I'm fine!" });
            });
            System.Threading.Thread.Sleep(-1);
        }
    }
}


下载

Hello Demo

© 著作权归作者所有

共有 人打赏支持
泥水佬

泥水佬

粉丝 65
博文 78
码字总数 46392
作品 7
广州
架构师
消息智能路由组件SmartRoute

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

泥水佬
2015/08/17
0
1
smartroute集成聊天通讯集群

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

泥水佬
2015/08/26
0
0
SmartRoute零配置零安装实现分布式负载应用

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

泥水佬
2016/01/14
174
0
基于 Dotnet Core 的服务通讯组件--SmartRoute

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

泥水佬
2016/11/08
1K
2
.Net Core开源通讯组件 SmartRoute(服务即集群)

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

泥水佬
2016/11/08
99
0

没有更多内容

加载失败,请刷新页面

加载更多

一个可能的NEO链上安全随机数解决方案

0x00 困境 链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执...

暖冰
今天
1
0
【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
4
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
17
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部