Properly iterating over queues from ActiveMQ DestinationSource.getQueues response

前端 未结 2 736
一整个雨季
一整个雨季 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:08

    I had the same issue with getting all queues from a connection. Whenever i got the queues from the DestinationSource and then iterated afterwards (foreach) over this set, i got different number of queues (In the iteration loop i always get more queues than in the initial set).

    DestinationSource ds = connection.getDestinationSource();
    Set queues = ds.getQueues();
    log.debug("Found '" + queues.size() + "' queues");
    for (ActiveMQQueue queue : queues) {...}
    

    Then, i added a listener to the destination source like this

    DestinationSource ds = connection.getDestinationSource();
    Set queues = ds.getQueues();
    // Add listener:
    ds.setDestinationListener(event -> event.hashCode());
    log.debug("Found '" + queues.size() + "' queues");
    for (ActiveMQQueue queue : queues) {...}
    

    From now on, i always get the right number of queues and can iterate over the complete set.

    Allthough, i don't really know why ;)

提交回复
热议问题