gpt4 book ai didi

c# - 使用 activemq 请求响应 - 始终发送双重响应

转载 作者:行者123 更新时间:2023-11-30 22:42:05 27 4
gpt4 key购买 nike

我是 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 属性来阻止这种情况的解决方法

                if (message.NMSReplyTo != null)
{
producer.Send(message.NMSReplyTo, response);
Console.WriteLine("Receive: " + ((ITextMessage)message).NMSCorrelationID);
Console.WriteLine("Received from : " + message.NMSDestination.ToString());
Console.WriteLine("----------------------------------------------------");
}

在我看来,发生这种情况是因为监听器中有一个循环发送响应到同一个队列。

你们能帮我解决这个问题吗?

非常感谢,克里斯

最佳答案

这个问题通过对监听器和生产者响应使用相同的 session 来解决。在我的代码中,我使用不同的 session 来进行监听和生产者响应,因此创建了循环。

通过创建单个 session ,这个问题就解决了。请随时对此发表评论;)

问候,克里斯

关于c# - 使用 activemq 请求响应 - 始终发送双重响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4602160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com