2013-12-24 66 views
0

我是activemq的新手。 T想問一個關於Activemq主題的問題。我成功地從隊列中獲取消息。此外,我可以將消息發送到主題/隊列,但我無法從Topic獲得消息。無法使用activemq中Topic的消息

我試過使用Java代碼。結果是一樣的。

以下是我的核心代碼:

connection.ClientId = clientId; 
connection.Start(); 
using (ISession session = connection.CreateSession()) 
{     
    ITopic topic = new Apache.NMS.Commands.Topic(topicName); 
    IDestination destination = SessionUtil.GetDestination(session, topicName, 
            DestinationType.Topic); 

    using (IMessageConsumer consumer = **session.CreateDurableConsumer**(topic, "news", null, false)) 
    { 
     **consumer.Listener += new MessageListener(consumer_Listener);**  
     //**IMessage iMsg = consumer.Receive();** 
     // if (iMsg != null)//{ 
     // ITextMessage msg = (ITextMessage)iMsg; 
     // return msg.Text;   
     // }  
      //else 
       //return iMsg; 
    } 
} 

我也使用:IMessage iMsg = consumer.Receive(); IMsg總是空(topicname有消息。我如何消費主題的消息?

回答

0

我對「使用」這個短語很愚蠢,因爲我使用「使用」打開連接和會話。當代碼塊被執行時,連接/會話消失。現在我不使用「使用」塊來進行連接。就像普通的代碼一樣。有用。我也建立「Global.asax」文件。該程序可以監聽Topic一旦啓動。與此同時,我寫了一個函數來分析連接。我測試了一下。一旦消息發送到主題,Onessage()函數將被執行。

只是解決我的問題。也許你會有更好的答案。謝謝蒂姆。

0

消息需要在主題消費者創建後發送。一個主題是火併且忘記,如果沒有消費者,則該消息被丟棄。任何聯機的消費者只會收到在該時間之後發送的消息,除非它是持久主題消費者或隊列消費者。

對於持久消費者,您必須創建它的一個實例,以便在將這些消息發送到主題前有訂閱記錄。所以我想你的問題是你之前沒有訂閱這個消費者,所以經紀人沒有爲它存儲任何消息。

+0

我有一點點。我需要首先爲Topic創建一個持久的顧客。然後將消息發送給主題。消息將由在線或離線的耐用消費者接收?我也想問一下「Receive()」和consumer.Listener的方法之間的區別。 – Yolanda

+0

我測試了兩種方法。程序只從隊列或topic中讀取一條消息,然後跳過程序。持久主題訂閱者不能接收離線消息。只接收在線消息(只有一條消息)。我不擅長英語。我盡力解釋我的問題並理解你的答覆。非常感謝。 – Yolanda