Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接关闭时未销毁ActiveMQ NMS临时队列_C#_Activemq_Nms - Fatal编程技术网

C# 连接关闭时未销毁ActiveMQ NMS临时队列

C# 连接关闭时未销毁ActiveMQ NMS临时队列,c#,activemq,nms,C#,Activemq,Nms,我在活动MQ文档中读到,当用于创建临时队列的连接关闭时,代理会删除临时队列 我使用的是ApacheNMSV1.5.0和ActiveMQ5.1.3,即使连接超出范围,临时队列也始终保持不变 我有一个客户机/服务器场景,其中客户机创建一个临时队列并创建一条消息,在消息的ReplyTo属性中指定临时队列。 然后,服务器组件读取消息并开始向回复队列发送消息 不幸的是,当客户端关闭其连接时,它创建的临时队列不会被删除 下面的代码片段应该说明我的意思 我创建一个连接,并使用该连接创建一个临时队列。 我关闭连

我在活动MQ文档中读到,当用于创建临时队列的连接关闭时,代理会删除临时队列

我使用的是ApacheNMSV1.5.0和ActiveMQ5.1.3,即使连接超出范围,临时队列也始终保持不变

我有一个客户机/服务器场景,其中客户机创建一个临时队列并创建一条消息,在消息的ReplyTo属性中指定临时队列。 然后,服务器组件读取消息并开始向回复队列发送消息

不幸的是,当客户端关闭其连接时,它创建的临时队列不会被删除

下面的代码片段应该说明我的意思

我创建一个连接,并使用该连接创建一个临时队列。 我关闭连接并创建第二个连接。 我不能使用会话在临时队列上生成和使用消息 由第二个连接创建,但我可以

有人能告诉我我是不是做错了什么吗。如何获取活动MQ以删除临时队列

非常感谢您的帮助

[Test]
public void TempQueueTest()
{
    var cf = new ConnectionFactory("tcp://activemq-broker:61616");


    using (var connection = cf.CreateConnection())
    {
        connection.Start();

        using (var session = connection.CreateSession())
        {
            var normalQueue = session.GetQueue("normalQueue");

            ITemporaryQueue tempQueue = session.CreateTemporaryQueue();

            using (var producer = session.CreateProducer(normalQueue))
            {

                // create a messasge and put on a normal queue
                //specify the temp queue as the reply to queue

                var mesage = new ActiveMQTextMessage("hello");
                mesage.ReplyTo = tempQueue as ActiveMQDestination;
                producer.Send(mesage);
            }
        }
        connection.Stop();
    }


    // ok, connection has been disposed, so the temp queue should be destroyed

    // create a new connection
    using (var connection = cf.CreateConnection())
    {
        connection.Start();

        using (var session = connection.CreateSession())
        {
            var normalQueue = session.GetQueue("normalQueue");

            using (var consumer = session.CreateConsumer(normalQueue))
            {
                var message = consumer.Receive() as ActiveMQTextMessage;

                // replyToDest is the temp queue created with the previous connection
                var replyToDest = message.ReplyTo;


                using (var producer = session.CreateProducer(replyToDest))
                {
                    // i shouldn't be able to send a message to this temp queue
                    producer.Send(new ActiveMQTextMessage("this shouldn't work"));
                }

                using (var tempConsumer = session.CreateConsumer(replyToDest))
                {
                    // is shouldn't be able to receive messages on the temp queue as it should be destroyed
                    var message1 = tempConsumer.Receive() as ActiveMQTextMessage;
                }
            }

        }
        connection.Stop();
    }

}

考虑到你正在使用的古代版本,我不知道有什么方法可以修复这里发生的事情。代码看起来是正确的,但在NMS libs的v1.5.0版本和当前的1.6.0版本之间有大量修复,其中许多修复了临时目标的问题。我建议您尝试使用更高版本,看看您的问题是否消失


现在,您可能必须使用JMX访问代理并删除旧的临时目的地

谢谢Tim-我已经将Apache.NMS.dll和Apache.NMS.ActiveMQ.dll升级到v1.6,似乎已经解决了这个问题!我投票结束这个问题,因为它与旧版本的库有关。最初的海报在回答中评论说,在新版本的图书馆中,这已经不是问题了。