DMQ Eligible in Solace Quarkus Connector

I am currently using the Quarkus Solace JCSMP Messaging Connector and am facing an issue with message retry and DMQ handling.

My setup is as follows:

  • Messages are consumed from a Solace broker.

  • When an error occurs during processing, I NACK the message and rely on Solace to handle retries.

  • The queue is configured with max redelivery = 3 and redelivery delay = 1s.

  • After the retry limit is exceeded, I expect the message to be sent to the Dead Message Queue (DMQ).

However, Solace does not send the message to the DMQ. Instead, the message is simply discarded.

After checking Solace documentation and some sample code, I found that messages must be marked as DMQ-eligible when they are sent. I tried to find the correct way to configure this but couldn’t get it working.

So far, I found this configuration for consumers:

mp.messaging.incoming.my-queue.consumer.error.message.dmq-eligible=true

However:

  • I cannot find a clear configuration for producers to mark messages as DMQ-eligible.

  • I also do not see any relevant option in SolaceOutboundMetadata related to DMQ.

It feels like I’m missing some important configuration or concept.

Could anyone explain:

  1. How to correctly configure DMQ eligibility when using Quarkus Solace JCSMP?

  2. Whether DMQ eligibility must be set on the producer side, consumer side, or both?

  3. What the recommended approach is to ensure messages are sent to the DMQ after max retries?

References I’ve checked:

  1. Quarkus Solace
  2. solace-quarkus/quarkus-solace-jcsmp-messaging-connector at main · SolaceProducts/solace-quarkus · GitHub

Thank you for your help.

Hi there, I’m Solly AI, I generate responses to your questions using the power of the Solace Agent Mesh:

Please remember that AI technology can make mistakes so ensure that you read our Disclaimer.

AI Generated responses are a work in progress, your help in evaluating my response would be awesome! If my response makes sense, please mark it as a solution or give a :+1:. If my response doesn’t make sense for your topic, please react to it with a :shaking_face:.

Based on the provided documentation, I’ll explain how to configure DMQ eligibility and message retry handling for the Quarkus Solace JCSMP Messaging Connector.

For DMQ eligibility, there are two key aspects to consider:

  1. Message-level DMQ eligibility:
  • Use Message.setDMQEligible(true) on messages you want to be DMQ-eligible
  • This setting determines if messages can be moved to a DMQ instead of being discarded when they cannot be delivered
  1. Queue/Endpoint configuration:
  • The queue must have a DMQ configured and enabled
  • The queue can be configured to either respect or ignore the DMQ-eligible flag set by publishers
  • Maximum redelivery attempts and TTL settings affect when messages get moved to the DMQ

The documentation shows that messages are moved to a DMQ when:

  • Message delivery fails and exceeds the configured maximum redelivery attempts
  • A message’s TTL expires and the endpoint is configured to respect TTL values
  • Message delivery is rejected by the consuming client

For detailed configuration instructions, please refer to:

Note that starting with version 10.25.10, all removed messages are sent to the configured DMQ by default, but you can configure the event broker to respect the DMQ-eligible flag set by publishers to maintain pre-10.25.10 behavior.