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发送不出去响应信息

posted @ 2015-07-14 17:15  向晚  阅读(3928)  评论(1编辑  收藏  举报