本章主要是经过helloWorld来介绍SmartRoute组件的使用,SmartRoute和通常的通信组件使用方式用点差异,使用方式主要强调就用零配置和零安装便可用.在传统通信应用中须要开启服务端而后由另外一方链接而后进行消息交互;而在SmartRoute中则以消息订阅和投递进行消息交互,因此在使用SmartRoute的时候只须要关注两件事情:以那个资源ID进行消息订阅和须要向那个资源ID发送消息. 异步
接下来经过一个helloWorld的示例来详解SmartRoute的使用. spa
既然组件强调的是零配置和零安装,组件初始化天然就是一件简单的事情.不过在使用组件前须要引用两个DLL:SmartRoute.DLL和Newtonsoft.Json.DLL.接下来须要作的就是一行代码的事情. code
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在不一样服务中订阅,那集群在投递的时候就会选择最后一次注册. 路由
注册后能够针对订阅对象制一系列的消息路由方法. get
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对象,则执行相应的方法. string
订阅对象提供几种消息投递方式,分别是:投递后不须要获取返回结果,投递后结果异步方法调用和投递后获取返回结果. it
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的消息. class
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); } } } }
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); } } }