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

Reply via email to