I'm trying to get advisory messages to work in an ActiveMQ server and
I'm not having any luck. I'm using a Spring container that is already
successfully interacting with non-advisory queues on the ActiveMQ
server. I use Spring to add a listener for consumed messages on a queue
like this:
<bean
class="org.springframework.jms.listener.DefaultMessageListenerContainer"
>
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destinationName">
<value>ActiveMQ.Advisory.MessageConsumed.Queue.MYQUEUE</value>
</property>
<property name="messageListener">
<bean class="testing.MyClass">
<property name="responseTemplate" ref="anotherJmsTemplate"/>
</bean>
</property>
<property name="sessionTransacted" value="true"/>
</bean>
I've also tried removing the sessionTransacted property, and setting it
to false.
In the activemq server configuration, I've updated the destination
polcy:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" memoryLimit="5mb"/>
<policyEntry topic=">" memoryLimit="5mb"/>
<policyEntry queue="MYQUEUE"
advisoryForConsumed="true"/>
</policyEntries>
</policyMap>
</destinationPolicy>
I've also tried:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" memoryLimit="5mb"
advisoryForConsumed="true"/>
<policyEntry topic=">" memoryLimit="5mb"/>
</policyEntries>
</policyMap>
</destinationPolicy>
And just for completeness, after all of this failed, I tried adding
advisorySupport="true" to the broker element in the configuration.
When I run tests, I can see in the ActiveMQ HTTP interface that a
message was sent to and received from the MYQUEUE queue, and I can see
that there is a consumer on
ActiveMQ.Advisory.MessageConsumed.Queue.MYQUEUE. However, at no time is
my onMessage callback on the MessageListener run, nor do I see any
messages sent or received on the
ActiveMQ.Advisory.MessageConsumed.Queue.MYQUEUE queue in the server HTTP
interface.
As a final test, I tried switching my advisory queue listener to
ActiveMQ.Advisory.Connection, a topic that is supposed to be enabled by
default. I can see in the HTTP monitor that the topic has a consumer,
but I still get no messages, and the monitor shows that no messages
where sent, even though I had programs connecting, sending messages and
disconnecting.
Finally, if I disable the regular consumer on MYQUEUE and edit the
destinationName of the advisory listener to listen to MYQUEUE directly,
it does get called, so its not a problem with the listener
implementation.
Why isn't this working?
Thanks
Chris
|