if you kill the JVM of the broken listener does the publisher
un-block?  If so then this is the expected behaviour.  The reason for
this is that even though the listner is logically broken, (it's not
receiving messages anymore), the broker does not know this since it
still has an active connection with the broker.  Furthermore, the
broker is blocking the publisher because it is queueing up messages in
memory for that dead consumer.

On 3/6/07, rabidgremlin <[EMAIL PROTECTED]> wrote:
Hi All,

I have a production application that receives SOAP "event" messages,
converts them into JMS messages and publishes them to a topic. I then have
multiple subscribers listening to these "events".

Under high loads (500-1000 events a minute) messages stop been published. I
continue to receive SOAP requests but my send() call on my TopicPublisher
just blocks.

We are able to consistently reproduce this behaviour in our test
environments but in a rather odd manner. If a test listener fails (by
running out of memory) then the TopicPublisher blocks on the send() and no
listeners get any messages. See Stacktrace 1 below.

I have tried setting setDispatchAsync(true) & setUseAsyncSend(true) on the
ActiveMQConnectionFactory for the TopicPublisher but I still get a hang up
but in a different place. See Stacktrace 2 below.

This happens with 4.01 and 4.1. I have also tried applying the patch listed
in AMQ-1093 to no avail.

This seems very odd since a broken listener should not effect the publisher
or the other listeners.

Anyone have any ideas ?

Jonathan

--------------------------------------------------
Stacktrace 1
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:474)
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar.await(
CondVar.java:75)
edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue.take(
ArrayBlockingQueue.java:318)
org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java
:38)
org.apache.activemq.transport.ResponseCorrelator.request(
ResponseCorrelator.java:74)
org.apache.activemq.ActiveMQConnection.syncSendPacket(
ActiveMQConnection.java:1112)
org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1555)
org.apache.activemq.ActiveMQMessageProducer.send(
ActiveMQMessageProducer.java:462)
org.apache.activemq.ActiveMQMessageProducer.send(
ActiveMQMessageProducer.java:384)
veventsink.mq.Sender.send(Sender.java:88)
veventsink.soap.impl.logevent.EventSenderThread.run(EventSenderThread.java
:94)
java.lang.Thread.run(Thread.java:595)

---------------------------------------
Stacktrace 2
java.net.SocketOutputStream.socketWrite0(Native Method)
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
java.net.SocketOutputStream.write(SocketOutputStream.java:136)
org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(
TcpBufferedOutputStream.java:109)
java.io.DataOutputStream.flush(DataOutputStream.java:106)
org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:119)
org.apache.activemq.transport.InactivityMonitor.oneway(
InactivityMonitor.java:141)
org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java
:80)
org.apache.activemq.transport.WireFormatNegotiator.oneway(
WireFormatNegotiator.java:93)
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:43)
org.apache.activemq.transport.ResponseCorrelator.oneway(
ResponseCorrelator.java:60)
org.apache.activemq.ActiveMQConnection.asyncSendPacket(
ActiveMQConnection.java:1151)
org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1546)
org.apache.activemq.ActiveMQMessageProducer.send(
ActiveMQMessageProducer.java:465)
org.apache.activemq.ActiveMQMessageProducer.send(
ActiveMQMessageProducer.java:384)
veventsink.mq.Sender.send(Sender.java:87)
veventsink.soap.impl.logevent.EventSenderThread.run(EventSenderThread.java
:94)
java.lang.Thread.run(Thread.java:595)

-------------------------------------------
Other Info
- using an embedded broker with persistence and JMX turned off
- TopicSession (for the publisher) is created with transacted set to false
and Session.AUTO_ACKNOWLEDGE
- Topic is created with default settings
- Sends on TopicPublisher have priority of 1, 30 second lifespan and
DeliveryMode.NON_PERSISTENT



--
Regards,
Hiram

Blog: http://hiramchirino.com

Reply via email to