none
请教如何判断消息队列中的消息数量 RRS feed

  • 问题

  • 之前一直没接触过windows的消息队列,这次是面临的数据并发写入的量有点大,因此公司某高手建议我先把信息暂存到windows的消息队列里,然后用另外一个程序去读这些信息,以避免频繁更改数据造成的程序响应时间延长等情况,提高程序响应速度。

    小第翻了翻MSDN,大概写了个简单的例子。功能算是实现了,包括向本机的消息队列和向远程服务器的消息队列发送以及读取消息。不过现在小弟有点疑惑的是怎么对远程服务器的消息队列中是否有消息进行判断,因为程序的使用还是存在低峰期的(如深夜),感觉直接调用Recive()函数会使线程卡在这一步骤上,不知道能不能实现“如果队列中没有消息则将线程挂起1分钟之后再次判断”这样的效果呢?毕竟我们的程序对数据的实时性要求不是太高——可能各位也猜到了,需要使用队列保存的大多都是日志类型的数据。

    下面是我目前写的两段简单代码,希望各位高手不吝赐教,感激不尽!

     

          //信息生产者向远程服务器消息队列中写入数据
          MessageQueue MQ = new MessageQueue("FormatName:DIRECT=TCP:10.168.4.36\\private$\\xiaofuyu"); 
    
          try
          {
            for (int i = 0; i < 100; i++)
            {
              Message myMessage = new Message();
              myMessage.Body = "This is a test message, No." + (i + 1).ToString();
              myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
    
              Console.WriteLine("已发送信息条数:" + (i + 1).ToString());
              MQ.Send(myMessage);
            }
            Console.WriteLine("发送完毕");
          }
          catch (System.Exception ex)
          {
            Console.WriteLine(ex.Message);
          }
    
          //.....省略部分代码
    
          //信息消费者从远程队列中读取数据
          MessageQueue MQ1 = new MessageQueue("FormatName:DIRECT=TCP:10.168.4.36\\private$\\xiaofuyu");
          MQ1.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
    
          Message myMessage1 = new Message();
          try
          {
            do
            {
              myMessage1 = MQ1.Receive(new TimeSpan(0, 0, 5));
              string Context = myMessage1.Body.ToString();
              Console.WriteLine("收到消息:" + Context);
            }
            while (myMessage1 != null);
          }
          catch (System.Exception ex)
          {
            Console.WriteLine(ex.Message);
          }
    


    2011年8月13日 6:46

答案

全部回复