MassTransit MSMQ酒吧多子。 当是RuntimeServices准备好了吗?(Ma

2019-09-17 14:04发布

我已经建立了一个简单的测试,包括有两个用户发布,使用MSMQ和使用本地SQL Server数据库MassTransit(2.1.1)RuntimeServices一台机器上所有正在运行。

我已经包含了总线设置代码的下方,你可以看到发生了什么设置。 我手动和独立启动每个组件尝试锻炼,如果用户ins't运行会发生什么。

我第一次跑了两个用户,因此队列和订阅都设置并退出他们两个,不从消息退订。 如果我再运行它自己,它转储400级的消息队列中的那么快,因为它可以发布,我可以看到两个用户队列中有等待消息的不同数量。

我的假设是,我发布RuntimeServices已经能够自己设定了两个目标队列前。 随着总线设置和发布之间5秒钟时间,我得到了我期待400级的消息在这两个用户等待队列,即有些信息没有公布这两个队列。

我的问题是这样的; 有没有办法告诉如果RuntimeServices愿与数据库中已有的出版商开始时的用户?

这是出版商码

Bus.Initialize(sbc =>
        {
            sbc.SetCreateTransactionalQueues(true);
            sbc.ReceiveFrom("msmq://localhost/andy_publisher");
            sbc.UseSubscriptionService("msmq://localhost/mt_subscriptions");
            sbc.UseMsmq();
            sbc.VerifyMsmqConfiguration();
        });

        var bus = Bus.Instance;


        Thread.Sleep(5000); // this makes it all work :)

        int i = 0;
        foreach (string filename in System.IO.Directory.EnumerateFiles(@"C:\Users\andy.baker\Pictures\", "*.*", SearchOption.AllDirectories))
        {
            Console.WriteLine(filename);
            bus.Publish(new Messages.FileRegistered {FilePath = filename});
            i++;
        }

        Console.WriteLine("Published {0} messages", i);
        Console.ReadLine();

订户可以这样来配置;

Bus.Initialize(sbc => {
                     sbc.UseMsmq();
                     sbc.VerifyMsmqConfiguration();
                     sbc.ReceiveFrom("msmq://localhost/andy_subscriber1");
                              sbc.UseSubscriptionService("msmq://localhost/mt_subscriptions");
                           }
            );

...和第二用户...

Bus.Initialize(sbc =>
        {
            sbc.UseMsmq();
            sbc.VerifyMsmqConfiguration();
            sbc.ReceiveFrom("msmq://localhost/andy_subscriber2");
            sbc.UseSubscriptionService("msmq://localhost/mt_subscriptions");
        }

在此先感谢您的任何建议。

Answer 1:

你如何订阅你的消费者? 为了生存,他们重新启动应该是永久性的。 http://docs.masstransit-project.com/en/latest/configuration/sub_config_api.html

s.Consumer<TConsumer>().Permanent();


文章来源: MassTransit MSMQ Pub with multi-sub. When is RuntimeServices ready?