MassTransit入門


.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的一個HandlerPublish了一個消息。

如果你覺得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發送不出去響應信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM