簡體   English   中英

如何使用 ActiveMQ 5.x 檢索 session 的創建主題(和隊列)

[英]How to retrieve created Topics (and Queues) of session with ActiveMQ 5.x

我使用session.createTopic(topicname)創建了不同的主題。 如何檢索 session 中所有可用主題的列表? 我嘗試使用session.getStats() ,但我無法迭代它來獲取我需要的信息。

JMS API 不提供任何方法來提供使用javax.jms.Session創建的所有目的地的列表。

我建議您將創建的javax.jms.Destination實例存儲在本地數據結構中(例如java.util.ArrayList )以便跟蹤它們。

請記住, javax.jms.Session.createTopic(String)javax.jms.Session.createQueue(String)只是分別創建javax.jms.Topicjavax.jms.Queue的客戶端實例。 他們實際上並沒有在代理上創建主題或隊列。 這在 JavaDoc 中有說明,例如:

請注意,此方法只是創建一個封裝主題名稱的 object。 它不會在 JMS 提供者中創建物理主題。 JMS 不提供創建物理主題的方法,因為這將特定於給定的 JMS 提供者。 創建物理主題是特定於提供商的,通常是由管理員執行的管理任務,盡管一些提供商可能會在需要時自動創建它們。 一個例外是創建一個臨時主題,這是使用 createTemporaryTopic 方法完成的。

您引用的getStats()方法不是 JMS API 的一部分。 它是 ActiveMQ 5.x JMS 客戶端實現所獨有的。 此外,它不會跟蹤使用相應 session 創建的目的地的名稱。

使用以下命令,您將從代理獲取所有主題:

 Set<ActiveMQTopic> topics = activeMqConnection.getDestinationSource().getTopics();

但我不認為它想要你想要的。 另一種選擇是:

session.getSessionStats()
.getProducers()
.stream()
.map(JMSProducerStatsImpl::getDestination)
.collect(Collectors.toList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM