【问题标题】:MassTransit MSMQ Pub with multi-sub. When is RuntimeServices ready?MassTransit MSMQ Pub 与多子。 RuntimeServices 什么时候准备好?
【发布时间】:2012-05-29 16:00:13
【问题描述】:

我设置了一个简单的测试,其中包含一个发布者和两个订阅者,所有订阅者都使用 MSMQ 和 MassTransit (2.1.1) RuntimeServices 在一台机器上运行,后者使用本地 Sql Server 数据库。

我在下面包含了总线设置代码,以便您查看设置的内容。我正在手动和独立地启动每个组件,以尝试测试如果订阅者没有运行会发生什么。

我首先运行了两个订阅者,因此队列和订阅都已设置完毕,然后将它们都退出,而无需取消订阅消息。如果然后我自己运行发布者,它会尽可能快地在队列中转储 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");
        }

提前感谢您的任何建议。

【问题讨论】:

    标签: msmq publish-subscribe masstransit


    【解决方案1】:

    您如何订阅您的消费者? 为了在重启后存活,它们应该是永久性的。 http://docs.masstransit-project.com/en/latest/configuration/sub_config_api.html

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 2019-06-03
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多