[英]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.Topic
或javax.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.