Limitations when working with ActiveMQ
Although QueueExplorer makes queues and messages look similar to folders and files, under the hood they are still first-in first-out queues. For some operations QueueExplorer will perform Receive and/or Send operations. Send operation will create new message and they’ll be put at the end of the queue.
- When you load, copy, drag&drop or edit message it will go to the end of queue.
- When you edit or copy message, QueueExplorer actually sends new messages to ActiveMQ. Because of that, some properties could be changed like ID, timestamp, etc.
- Some operations could fail or produce undesirable results if messages are removed in the mean time by some other program. It’s advisable to stop other processes that use queue while operations like copy, move, etc. are performed.
Message limit and maxBrowsePageSize
ActiveMQ has a settings which limits number of messages that can be browsed by a client. By default, it’s 400.
This setting prevents QueueExplorer to read all (or top 1000, Top 10000, etc) messages from the queue. Another problem is we can’t find out which exact value is configured. So only thing QueueExplorer can do is to guess it - if we notice there are more messages in the queue than we got, we display a warning.
More details about maxBrowsePageSize
- If no destination policy is specified, there’s no limit.
- If there’s a policy for some queue, the number of messages will be limited. There’s no way to overcome that from QueueExplorer’s side.
- There’s no way to even get info from ActiveMQ whether that limitation is in effect or not.
- Only way to detect this problem is if we compare queue’s count and number of message we actually received. That means we can’t raise that warning with few messages in a queue, or if we limit to some smaller number on our side (e.g. Top 100). We can only detect it when the number of messages is greater than the limitation.
Only way to fix this is on the server - configure maxBrowsePageSize for all policies which target queues. Something like this (just an example):
<policyEntry queue=”>” maxBrowsePageSize=”1000”> </policyEntry>
Drawback to this is that ActiveMQ loads all messages to memory when we request them, which increases memory load.