Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过MSMQ的MassTransit不起作用,为什么?_C#_Masstransit - Fatal编程技术网

C# 通过MSMQ的MassTransit不起作用,为什么?

C# 通过MSMQ的MassTransit不起作用,为什么?,c#,masstransit,C#,Masstransit,这是我的MassTransit代码 用户控制台应用程序: namespace ConsoleSubscriber { class Program { static void Main(string[] args) { Console.WriteLine("set up a subscriber"); Bus.Initialize(config => {

这是我的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);
            }
        }
    }
}
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();    
        }
    }
}
发布者控制台应用程序:

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);
            }
        }
    }
}
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();    
        }
    }
}
当我运行这两个控制台应用程序时,消费者似乎没有接收到消息。有什么想法吗


干杯

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


还有其他路由方法可以在进程重新启动之间保留订阅数据,只要您继续前进。我将开始考虑使用订阅服务、静态路由,或者在获得此方面的句柄后仅使用RabbitMQ

谢谢,是的。问题是时间,我已经设法在总线初始化之后为sub和pub设置了睡眠。现在sub接收到消息。@Travis您建议的最小睡眠时间是多少毫秒?这在某种程度上取决于您的网络配置和延迟,但大约500-1000毫秒的时间应该足以让多播完成这项任务。(大约1/2到1秒钟)。很好,在检查我的代码半天之后,总线初始化后的一个
线程。睡眠
神奇地解决了发布问题。