本章主要是經過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); } } }