我是新的activeMq。我試圖創建一個這樣的簡單請求響應。請求響應activemq - 總是發送雙重響應
public Listener(string destination)
{
// set factory
ConnectionFactory factory = new ConnectionFactory(URL);
IConnection connection;
try
{
connection = factory.CreateConnection();
connection.Start();
ISession session = connection.CreateSession();
// create consumer for designated destination
IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue(destination));
consumer.Listener += new MessageListener(consumer_Listener);
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw new Exception("Exception in Listening ", ex);
}
}
在onMessage
static void consumer_Listener(IMessage message)
{
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/");
using (IConnection connection = factory.CreateConnection())
{
//Create the Session
using (ISession session = connection.CreateSession())
{
//Create the Producer for the topic/queue
// IMessageProducer prod = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTempQueue(message.NMSDestination));
IMessageProducer producer = session.CreateProducer(message.NMSDestination);
// Create Response
// IMessage response = session.CreateMessage();
ITextMessage response = producer.CreateTextMessage("Replied from VS2010 Test");
//response.NMSReplyTo = new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("testQ1");
response.NMSCorrelationID = message.NMSCorrelationID;
if (message.NMSReplyTo != null)
{
producer.Send(message.NMSReplyTo, response);
Console.WriteLine("Receive: " + ((ITextMessage)message).NMSCorrelationID);
Console.WriteLine("Received from : " + message.NMSDestination.ToString());
Console.WriteLine("----------------------------------------------------");
}
}
}
}
每次我試圖發送到聽者的請求,響應總是重複發送。第一個響應將具有NMSReplyTo屬性,而另一個則不具有。
我的解決方法由cheking的NMSReplyTo性能
if (message.NMSReplyTo != null)
{
producer.Send(message.NMSReplyTo, response);
Console.WriteLine("Receive: " + ((ITextMessage)message).NMSCorrelationID);
Console.WriteLine("Received from : " + message.NMSDestination.ToString());
Console.WriteLine("----------------------------------------------------");
}
在我的理解,以阻止這種情況下,發生這種情況,原因是在監聽到相同的隊列圓形發送響應。
你們能幫我解決這個問題嗎?
非常感謝, 克里斯
添喜;目標參數是隊列名稱,用作構造參數,因此我可以爲一個隊列創建一個偵聽器。 我想要做的是監聽指定隊列,然後通過發送消息進行響應的監聽器。 希望有所幫助,並感謝蒂姆的迴應。 :) – 2011-01-06 00:41:00
通常,請求/響應包含兩個獨立的目標,一個通常是接收請求的標準主題或隊列,另一個通常是請求處理程序發送響應的臨時目標。在相同的目的地發送請求和響應是什麼讓你進入循環。 – 2011-01-07 19:21:51