私は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プロパティを持ち、もう一方の応答はNMSReplyToプロパティを持ちます。 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("----------------------------------------------------");
}
をchekingすることにより、このような状況を停止する
私の回避策同じキューにリスナーが円形で、送信応答があったので、これが起こりました。
どうすればこの問題を解決できますか?
多くのおかげで、 クリス
こんにちはティムは、 destinationパラメータはキュー名です。コンストラクタパラメータとして使用するので、1つのキューに対してリスナを作成できます。 私は何をしたいのですが、指定キューを監視し、メッセージを送信して応答するリスナーです。 ご協力いただきありがとうございました。返信いただきありがとうございます。 :) –
一般に、要求/応答には2つの別個の宛先が含まれます.1つは通常、標準のトピックまたは要求を受け取るキューで、もう1つは通常、要求ハンドラが応答を送信する一時的な宛先です。同じ宛先で要求と応答を送信することが、循環ループになっています。 –