This took some experimenting.
My problem: I am using Spring Framework 3.0 JMS support to wire up a JMS listener container to listener beans. The XML syntax looks like:
<jms:listener-container> <jms:listener destination="hard-coded-queue-name" ref="listener"/> </jms:listener-container>
This XML is distributed with each program instance. Not a single single server or client instance but a server cluster or client farm: each one of these needs a unique destination so JMS routes correctly.
My first try fixed the uniqueness problem but was less than fully usable:
<jms:listener-container> <jms:listener destination="#{T(java.util.UUID).randomUUID().toString()}" ref="listener"/> </jms:listener-container>
This suffers excess cleverness. Each listener gets a random UUID for its destination. But, how does the listener refer to this queue name when filling in a JMS reply-to field, or logging or other purposes?
The real answer is to ask the listener for a destination, no produce one externally:
<jms:listener-container> <jms:listener destination="#{listener.inbox}" ref="listener"/> </jms:listener-container>
And in the listener:
private final String inbox = UUID.randomUUID().toString(); public String getInbox() { return inbox; }
No comments:
Post a Comment