Properly iterating over queues from ActiveMQ DestinationSource.getQueues response

前端 未结 2 712
一整个雨季
一整个雨季 2021-01-22 20:39

For some reason in the following code, destinationSource.getQueues() is returning a CopyOnWriteArraySet instead of a simple Set. This is a

2条回答
  •  失恋的感觉
    2021-01-22 21:00

    As you say, it is the nature of CopyOnWriteArraySet to behave this way. The list of queues can change concurrently with your thread. By returning you a CopyOnWriteArraySet ActiveMQ is giving you a data structure that is safe to use in your thread (no change of ConcurrentModificationException) and one that will remain up-to-date.

    Since new queues could be added at any time there is no way to "wait" until they are all done.

    If you want to know when new queues are added and then do something in response, the best way is to listen for the appropriate ActiveMQ advisory message. This facility will let you respond to message queue additions, consumer and producer additions, as well as removals of the same. Think link has a code example.

提交回复
热议问题