4

这是我的 MassTransit 代码。

订阅者控制台应用程序:

namespace ConsoleSubscriber
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("set up a subscriber");

            Bus.Initialize(config =>
            {
                config.UseMsmq();
                config.VerifyMsmqConfiguration();
                config.UseMulticastSubscriptionClient();
                config.UseControlBus();
                config.ReceiveFrom("msmq://localhost/test_end");
                config.Subscribe(s => s.Instance(new Consumer()).Permanent());                    
            });

            Console.Read();
        }         
    }

    public class Consumer : Consumes<Message>.All
    {
        public void Consume(Message message)
        {
            Console.WriteLine("start consuming message");

            if (string.IsNullOrEmpty(message.Ids))
            {
                Console.WriteLine("no ids");     
            }
            else
            {
                Console.WriteLine("ids are " + message.Ids);
            }
        }
    }
}

留言类:

[Serializable]
public class Message
{
    public string Ids { get; set; }
}

发布者控制台应用程序:

namespace ConsolePublisher
{
    class Program
    {
        static void Main(string[] args)
        {                
            Console.WriteLine("start publishing");

            // initialize bus 
            Bus.Initialize(config =>
            {
                config.UseMsmq();
                config.VerifyMsmqConfiguration();
                config.UseMulticastSubscriptionClient();
                config.UseControlBus();
                config.ReceiveFrom("msmq://localhost/test_queue");
            });

            Bus.Instance.Publish(new Message());
            Console.WriteLine("Message sent 1");

            var msg2 = new Message() { Ids ="1,2,3,4" };
            Bus.Instance.Publish(msg2);
            Console.WriteLine("Message sent 2");

            Console.Read();    
        }
    }
}

当我运行这两个控制台应用程序时,消费者似乎没有接收到消息。有任何想法吗?

干杯!

4

1 回答 1

6

在调用发布之前尝试进入睡眠状态。多播订阅可能需要一些时间来配置,因为这两个实例正在相互通信。还要确保您在发布者之前启动了消费者。也替换config.Subscribe(s => s.Instance(new Consumer()).Permanent());config.Subscribe<Consumer>();可能有帮助。

一旦您继续前进,还有其他路由方法可以在进程重新启动之间保留订阅数据。一旦你掌握了这个,我就会开始考虑使用订阅服务、静态路由,或者只是使用 RabbitMQ。

于 2013-01-23T12:07:57.957 回答