You can save yourself a bit of work by combining your first two steps into
one using the listQueues method on ActiveMQServerControl and passing an
"options" String like:

  {"field":"MESSAGE_COUNT","value":"0","operation":"GREATER_THAN"}

> Will this strategy avoid interfering with the broker’s auto-delete?

Yes.

> Is queue enumeration low-impact enough to call it every few seconds?

It should be, but you should test with a production work-load to ensure
performance meets your expectations.


Another potential solution would be to configure the expiry-address and
expiry-delay for these job addresses so that any message that sits in any
job queue for "too long" would be expired to a common queue and a listener
on that queue could deal with it. This would avoid the polling and likely
simplify your "clean-up" application considerably.


Justin

On Sun, Jan 1, 2023 at 8:25 AM John Lilley
<john.lil...@redpointglobal.com.invalid> wrote:

> Greetings!
>
>
>
> In our app, we have a lot of batch “jobs”, each of which stands up an RPC
> service on a unique queue.  However, when jobs quit, clients may still try
> to communicate and I don’t want this to hang, I want clients to see an
> error reply.  To this end, I am implementing a “fallback” service for
> ended-job RPC queues, of which there can be 100s,  that returns errors.
> This is expected to be very low traffic and the polling can be done
> infrequently (like every few seconds), so performance doesn’t matter.
>
>
>
> The queues are set to auto-delete, and in order to keep broker memory
> down, I don’t want to do anything to prevent auto-deletion.  Because in
> most cases, nothing will be posted to these queues.  I want to use a
> strategy like this:
>
>    - Enumerate queues first, to see which ones exist.
>    - Of the queues that exist, use the queue-based management API to get
>    a message count (see method below).
>    - Only for queues that have a non-zero message count, create a
>    consumer and call receive() to poll for messages.
>
>
>
> Will this strategy avoid interfering with the broker’s auto-delete?
>
> Is queue enumeration low-impact enough to call it every few seconds?
>
>
>
> Method used for getting queue count (this is all using the 
> artemis-jms-client-all
> JMS client):
>
>
>
> public int getQueueEntryCount(String queueName) {
>
>   return getIntAttribute(queueName, "MessageCount");
>
> }
>
>
>
> private int getIntAttribute(final String queueName, final String
> attributeName) {
>
>   String resourceName = ResourceNames.QUEUE + queueName;
>
>   synchronized (lock) {
>
>     ClientRequestor client = getClient();
>
>     try {
>
>       ClientMessage request = clientSession.createMessage(false);
>
>       ManagementHelper.putAttribute(request, resourceName, attributeName);
>
>       ClientMessage reply = client.request(request);
>
>       if (ManagementHelper.hasOperationSucceeded(reply)) {
>
>         return (int)(long)ManagementHelper.getResult(reply, Long.class);
>
>       } else {
>
>         // Because we cannot tell the difference between
> queue-does-not-exist and a real error
>
>         return 0;
>
>       }
>
>     }
>
>     catch (Exception e) {
>
>       throw new RuntimeException("Error fetching " + attributeName + " for
> queue " + queueName, e);
>
>     }
>
>   }
>
> }
>
>
>
> Thanks
>
> John
>
>
>
> [image: rg] <https://www.redpointglobal.com/>
>
> John Lilley
>
> Data Management Chief Architect, Redpoint Global Inc.
>
> 888 Worcester Street, Suite 200 Wellesley, MA 02482
>
> *M: *+1 7209385761 <+1%207209385761> | john.lil...@redpointglobal.com
>
> PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is
> confidential and is intended solely for the use of the individual(s) to
> whom it is addressed. If you believe you received this e-mail in error,
> please notify the sender immediately, delete the e-mail from your computer
> and do not copy, print or disclose it to anyone else. If you properly
> received this e-mail as a customer, partner or vendor of Redpoint, you
> should maintain its contents in confidence subject to the terms and
> conditions of your agreement(s) with Redpoint.
>

Reply via email to