何らかの理由で、次のコードでは単純な ではなくdestinationSource.getQueues()
が返されます。for ループはがいっぱいになる前に処理を開始し、その性質上ループ前の項目のみを処理するため、これは問題です。そこに を投入できることはわかっていますが、根本的な問題は解決しません。ではなくとして返される理由はありますか? また、反復中に追加されたものであっても、すべてのアイテムが確実にカバーされるようにする方法はありますか?CopyOnWriteArraySet
Set
Set
CopyOnWriteArraySet
Set
Thread.sleep()
CopyOnWriteArraySet
Set
CopyOnWriteArraySet
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
ActiveMQConnection activeMQConnection = (ActiveMQConnection) connectionFactory.createConnection();
activeMQConnection.start();
DestinationSource destinationSource = activeMQConnection.getDestinationSource();
Set<ActiveMQQueue> queues = destinationSource.getQueues();
for(ActiveMQQueue queue : queues) {
queueNames.add(queue.getPhysicalName());
}
activeMQConnection.close()
編集:ここに私が思いついた解決策がありますが、完全ではありませんが、キューが追加されるまでに1秒以上かかるまで、すべてのキューを確実に取得できます。
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
ActiveMQConnection activeMQConnection = (ActiveMQConnection) connectionFactory.createConnection();
activeMQConnection.start();
DestinationSource destinationSource = activeMQConnection.getDestinationSource();
Set<ActiveMQQueue> queues = destinationSource.getQueues();
do {
for(ActiveMQQueue queue : queues) {
String physcialName = queue.getPhysicalName();
if(!queueNames.contains(physcialName)) {
queueNames.add(physcialName);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
log(e.toString());
}
}while(queueNames.size() < queues.size());
activeMQConnection.close();