我讀過Active MQ文檔,當代理使用創建連接時,代理刪除了臨時隊列。ActiveMQ NMS臨時隊列在連接關閉時未被破壞
我正在使用Apache NMS v1.5.0和Active MQ 5.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();
}
}
我投票結束這個問題作爲題外話題,因爲它涉及到一個老版本的圖書館。原來的海報在回答中評論說,現在在圖書館的新版本中這不是問題。 –