2015-10-23 54 views
1

我正在創建一個正在監聽MQ中的消息的Windows服務。我目前的代碼似乎是一遍又一遍地重新處理同一個消息。我想改變這種代碼的當前消息完成後,纔開始聽的消息處理不聽,直到消息被處理Windows服務

這裏是我的,保持循環相同的消息當前代碼(一個消息的處理約需6分鐘)

protected override void OnStart(string[] args) 
     { 
      var maincode = new Thread(ProcessCode); 
      maincode.Name = "dud"; 
      maincode.IsBackground = false; 
      maincode.Start(); 

     } 

    void ProcessCode() 
     { 
      do 
      { 
       theListener.MessageReceived += new EventHandler<MessageReceivedEventArgs>(MQ_MessageReceived); 

       IBM.WMQ.MQMessage mqMessage = theListener.Listen("manager", "theQueue"); 

       Thread.Sleep(5000); 
      } while (true); 
     } 
+0

如果您正在重新處理相同的消息,則可能需要在處理後確認消息以將其從隊列中實際刪除。所有這些都取決於MQ的工作方式(我不知道MQ),我猜是這個版本。從快速搜索看來,您可以以不同方式使用消息,因此您必須根據您在客戶端使用的配置來檢查是否遵循了正確的過程。 –

回答

3

如果您已通過使用Listen方法接收消息。我不確定爲什麼你要加入MessageReceived事件。我可能會將MQ_MessageReceived事件重命名爲HandleMessage刪除MessageReceived事件處理程序,只是做一些簡單的事情。

void ProcessCode() { while(true) { //assuming that the Listen method blocks and waits for a message to be received. var message = theListener.Listen("manager, "theQueue"); HandleMessage(message); } }

也注意到,你可能希望把一些邏輯才能夠停止處理消息時您需要關閉該服務了。