.NET平台ESB框架的中文資料少的可憐,NServiceBus的有幾篇,MassTransit的根本找不到,只好硬着頭皮看官方的英文文檔,順便翻譯出來加深理解。
歡迎拍磚。
MassTransit是一個.net平台的企業服務總線,使用消息隊列(MSMQ,)進行通訊。
安裝
1 使用NuGet安裝
nuget Install-Package MassTransit
但是要注意:使用NuGet安裝的只有dll,不包含MassTransit.RuntimeServices可執行程序和數據庫創建腳本。
RuntimeServices通過Subscription Service把消息分發給多個訂閱者。
如果你打算使用 UseSubscriptionService,那么就需要自己編譯源代碼。
2 編譯源代碼
倉庫地址 https://github.com/MassTransit/MassTransit
如果你不想要用vs編譯 而是要運行build.bat那么需要下列工具:
- .Net 4.0 sdk
- ruby v 1.8.7
- gems (rake, albacore)
配置
shut up ,just show the code !
public class YourMessage { public string Text { get; set; } }
public class Program
{
public static void Main()
{
Bus.Initialize(sbc =>
{
sbc.UseMsmq(msmq =>
{
msmq.VerifyMsmqConfiguration();
msmq.UseMulticastSubscriptionClient();
//msmq.UseSubscriptionService("123.123.12.12");
});
sbc.ReceiveFrom("msmq://localhost/test_queue");
sbc.Subscribe(subs=>
{
subs.Handler<YourMessage>(msg=>Console.WriteLine(msg.Text));
});
});
Bus.Instance.Publish(new YourMessage{Text = "Hi"});
}
}
這些代碼干了些啥事兒呢?
如果我們創建消息系統,首先需要創建消息。上面的代碼,我們創建了一個普通的c#類:YourMessage,這就是一個消息,是不是很簡單?
上面的代碼中,我們使用MassTransit的靜態類Bus的靜態方法Initialize進行初始化。首先我們告訴MassTransit我們使用MSMQ作為消息傳輸機(transport)sbc.UseMsmq(...),msmq.VerifyMsmqConfiguration()對MSMQ進行驗證。
After that we have the msmq.UseMulticastSubscriptionClient() this tells the bus to pass subscription information around using PGM over MSMQ giving us a way to talk to all of the other bus instances on the network. This eliminates the need for a central control point.
然后sbc.ReceiveFrom("msmq://localhost/test_queue")告訴bus我們收件箱地址(這個地址永遠使用本機外網ip,不帶“private$”),bus收到消息后會自動分發給所有訂閱了這個消息的消費者(consumers )。
最后配置了YourMessage的一個Handler並Publish了一個消息。
如果你覺得Singleton有問題,那可以用下面的代碼
var bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq(msmq => msmq.UseMulticastSubscriptionClient());
sbc.ReceiveFrom("msmq://localhost/test_queue");
});
總結:
1,msmq的地址格式:"msmq://42.131.31.22/" + queueName 不帶private$
2,如果隊列是手工創建的話,需要設置權限。
3,UseSubscriptionService(xxx)如果xxx是遠程地址,那么ReceiveFrom(yyy)yyy是本機的外網ip,否則xxx發送不出去響應信息