dymDemo
github 地址:https://github.com/duyanming/dymDemo
dym 分布式開發框架 Demo 熔斷 限流 事件總線(包括基於內存的、rabbitmq的) CQRS DDD 實例 隨后更新
dym 分布式開發框架
dym 是一個分布式開發框架,同時支持 .net core2.2 、.net frameworker4.6.1。
1、運行Demo
第一步:啟動注冊中心
進入項目文件夾 dymDemo\YY.AppCenter\bin\Debug\netcoreapp2.2 ,運行命令 dotnet AppCenter.dll
看到下圖 說明運行成功
代碼:默認監聽6660端口
using dym.Rpc.Center; static class Program { static void Main(string[] args) { Console.Title = "YY.AppCenter"; Bootstrap.StartUp(args); } }
配置文件:dym.config
服務啟動后會注冊到<Servers>節點內
<?xml version="1.0" encoding="utf-8"?> <configuration> <!--#lbs 配置--> <Port>6660</Port> <TimeOut>120000</TimeOut> <Servers> </Servers> </configuration>
第二步:啟動服務Server
Server可以和 AppCenter 不在同一台電腦,也可以運行多個server 也可以負載均衡,高級用法隨后介紹
進入項目文件夾 dymDemo\YY.Server\bin\Debug\netcoreapp2.2 ,運行命令 dotnet YY.Server.dll
看到下圖 說明 Server 成功運行 並且已經注冊到 注冊中心(APPCenter)運行成功
代碼:默認監聽6659端口
using dym.Rpc.Server; static class Program { static void Main(string[] args) { Bootstrap.StartUp(args); } }
配置文件:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--0,0 第一位是 工作站,第二位數據中心 (所有的 APPservice 的 兩位數不能重復例如不能存在【1,2】【1,2】) 可以存在【1,2】【2,1】 --> <IdWorker>0,0</IdWorker> <!--App名稱--> <AppName>App001</AppName> <!--監聽端口--> <Port>6659</Port> <!--權重--> <Weight>1</Weight> <!--功能 非dym.Plugs 加入方式--> <FuncName></FuncName> <!--忽略的功能 Trace,Logic--> <IgnoreFuncName></IgnoreFuncName> <!--超時時間毫秒--> <TimeOut>20000</TimeOut> <!--注冊到的目標--> <Ts Ip="10.112.93.122" Port="6660"/> <IocDll> <!-- IOC 倉儲--><!-- <Assembly>dym.Repository</Assembly> --><!-- 領域--><!-- <Assembly>dym.Domain</Assembly> --><!-- 查詢服務--><!-- <Assembly>dym.QueryServices</Assembly> --><!--事件Handler--><!-- <Assembly>dym.Command.Handler</Assembly>--> </IocDll> </configuration>
業務代碼示例:dym.Plugs.YYTestService
服務啟動 配置
using System; using dym.EngineData; namespace dym.Plugs.YYTestService { //服務啟動 配置 public class YYTestBootstrap : IPlugsConfigurationBootstrap { public void ConfigurationBootstrap() { /* * 服務啟動的時候會執行此方法 * 也可以用來加載插件的配置 */ } public void PreConfigurationBootstrap() { //Ioc 注入之前 } } }
業務編寫:
using dym.EngineData; using System; using System.Collections.Generic; using System.Text; namespace dym.Plugs.YYTestService { public class MyFirstModule: BaseModule { public MyFirstModule() { } public ActionResult MyT() { var xx = RequestString("XX"); Console.WriteLine($"來自客戶端的消息:{xx}"); return new ActionResult(true,new { Msg= " I from dym.Plugs.YYTestService MyFirstModule!" },null, xx); } } }
第三步:啟動Client測試分布式框架是否可以正常運行
啟動Client 測試 Client調用 Server是否成功
進入項目文件夾 dymDemo\YY.Client\bin\Debug\netcoreapp2.2 ,運行命令 dotnet YY.Client.dll
看到下圖 說明 Client 成功運行
客戶端代碼:
using System; using dym.Rpc.Client; namespace YY.Client { class Program { static void Main(string[] args) { /* * 1、AppName * 2、注冊中心 * 3、注冊中心端口 * 4、關閉調用鏈追蹤 */ DefaultConfigManager.SetDefaultConfiguration("YY.Client", "127.0.0.1", 6660,false); Restart: Console.WriteLine("請輸入一個消息然后回車發送到服務器:"); var inputMsg = Console.ReadLine(); var input = new InputTest() { channel = "dym.Plugs.YYTest", router = "MyFirst", method = "MyT", XX = $"{inputMsg}參數1" }; var rltStr = Connector.BrokerDns(input); //var outPut = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(rltStr); Console.WriteLine(rltStr); Console.WriteLine("-----------------------------------------------------------------------------"); var inputYYTest = new InputTest() { channel = "dym.Plugs.YYTest", router = "MySecond", method = "MyT", XX = $"{inputMsg}參數2" }; var rltStrYY = Connector.BrokerDns(inputYYTest); //var outPutYY = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(rltStr); Console.WriteLine(rltStrYY); goto Restart; } } public class InputTest : InputDtoBase { public string XX { get; set; } } }