文档章节

SmartRoute应用-helloWorld示例

泥水佬
 泥水佬
发布于 2015/08/24 12:09
字数 615
阅读 171
收藏 1
点赞 0
评论 0

        本章主要是通过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

© 著作权归作者所有

共有 人打赏支持
泥水佬

泥水佬

粉丝 63
博文 74
码字总数 41338
作品 6
广州
架构师
SmartRoute零配置零安装实现分布式负载应用

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

泥水佬 ⋅ 2016/01/14 ⋅ 0

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

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

泥水佬 ⋅ 2016/11/08 ⋅ 2

smartroute集成聊天通讯集群

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

泥水佬 ⋅ 2015/08/26 ⋅ 0

.Net Core开源通讯组件 SmartRoute(服务即集群)

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

泥水佬 ⋅ 2016/11/08 ⋅ 0

消息智能路由组件SmartRoute

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

泥水佬 ⋅ 2015/08/17 ⋅ 1

ylbtech-LanguageSamples-Hello World

ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Hello World 1.A,示例(Sample)返回顶部 “Hello World”示例 本示例演示了用 C# 编写的“Hello World”程序的几个版本。 在 Visu...

吞吞吐吐的 ⋅ 2017/10/18 ⋅ 0

从应用示例来认识Tiny框架

呵呵,Tiny框架神龙见首不见尾已经许多时间了,里面只看到一些几个孤零零的子框架。今天就通过Tiny开发示例的方式来重点展示一下利用Tiny框架是如何开发的。 HelloWorld 首先从这个神一样的示...

悠悠然然 ⋅ 2014/05/22 ⋅ 22

Java 转原生平台代码--RoboVM

编者注:RoboVM 项目已经关闭,目前有开源替代产品 BugVM。 RoboVM 编译器可以将 Java 字节码翻译成 ARM 或者 x86 平台上的原生代码,应用可直接在 CPU 上运行,无需其他解释器或者虚拟机。 ...

匿名 ⋅ 2013/01/24 ⋅ 1

《Java从小白到大牛精简版》之第3章 第一个Java程序

本书第一个Java程序是通过控制台输出HelloWorld,以这个示例为切入点,向大家系统介绍Java程序的编写、Java源代码结构以及一些基础知识。 在Java中,程序都是以类的方式组织的,Java源文件都...

tony关东升 ⋅ 2017/09/25 ⋅ 0

[Struts 2系列] Struts 2入门之HelloWorld

Struts 2框架的下载与安装: Struts 2下载地址: http://struts.apache.org/download.cgi 截止笔者准备开始着手写[Struts 2]系列博客时,Struts 2的最新版本为: Struts 2.3.24.1 下载Struts ...

LSantorini ⋅ 2016/01/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 42分钟前 ⋅ 0

vim使用手册--配对括号的查找

1、把光标放在标记有(、[或{处。 2、按%字符 3、此时光标的位置应当在配对的括号处 4、再次按%就可以跳回配对的第一个括号处。

dragon_tech ⋅ 45分钟前 ⋅ 0

c++ 、object-c printf,%02X和%x有什么区别 ?

%x即按十六进制输出,英文字母小写,右对齐。 %02X有以下变化:英文字母变大写,如果输出字符不足两位的,输出两位宽度,右对齐,空的一位补0。超过两位的,全部输出。 如果不用 %02x 会出现...

yizhichao ⋅ 50分钟前 ⋅ 0

Spring源码解析(七)——实例创建(中)

前言 上一节讲到了,Spring 会根据实例的作用域执行不同的创建逻辑,分别是 Singleton、Prototype、其他 Scope,其中 Singleton 会调用 getSingleton 从缓存中获取,缓存中没有才会创建实例;...

MarvelCode ⋅ 51分钟前 ⋅ 0

Thrift RPC实战(六) spring集成thrift

1.服务端设置 对泛型Thrift Service的支持, 通过采用spring配置以及反射的方式来实现.对于一个服务提供者来说,需要提供端口,接口以及接口实现类,因此在接口中spring配置文件中配置如下 <!...

lemonLove ⋅ 53分钟前 ⋅ 0

oracle11g自动分区使用

为什么使用自动分区? 在oracle11g之前,oracle是不支持自动分区功能的,这就可能导致我们系统在运行一段时间之后,就需要看看分区是否创建或者写触发器进行创建分区,否则就会导致数据无法入...

strict_nerd ⋅ 今天 ⋅ 0

Spring mvc ViewResolver视图解析器实现机制

概要 我们在controller里面经常这样return一个ModelAndView。 return new ModelAndView("userList", "users", userList); DispatcherServlet 靠 ViewResolver 把 userList 解析为 /WEB-INF......

轨迹_ ⋅ 今天 ⋅ 0

策略模式

1.策略模式 策略模式是同一个行为的不同处理办法。策略模式和简单工厂模式的区别:1.策略模式主要是方法的执行方式,工厂模式要获取的对象。两者的侧重点不同。 ...

Cobbage ⋅ 今天 ⋅ 0

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 今天 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部