The JMS transport should only accept messages when it is ready to process them
------------------------------------------------------------------------------
Key: SYNAPSE-435
URL: https://issues.apache.org/jira/browse/SYNAPSE-435
Project: Synapse
Issue Type: Bug
Components: Transports
Affects Versions: 1.2
Reporter: Andreas Veithen
Priority: Critical
Fix For: 1.3
This issue was initially described by Hans Drexler on the Axis mailing list:
http://www.nabble.com/axis2-JMS-transport-support-status--to19028249.html
While the report referred to the JMS transport version in Axis2 1.4, the
current version in Synapse has the same problem: the JMS transport listener
uses an asynchronous MessageListener (implemented by JMSMessageReceiver) that
immediately hands the received message over to a worker pool. This means that
the transport listener takes the messages as they arrive on the queue. On the
other hand, the worker pool is configured with an unbound work queue. The
effect is that if all threads in the pool are busy, the incoming JMS messages
will be stored in memory and only processed later. This strategy has several
issues:
* If the number of incoming messages is large, this can cause an out of memory
condition.
* Since the transport listener uses auto acknowledge, the messages awaiting
processing are lost when the server is shut down or crashes.
* The whole purpose of a message oriented middleware is to provide the
necessary infrastructure to reliably queue messages between producers and
consumers. Adding an additional (unreliable) in-memory queue in front of the
consumer violates this pattern.
The JMS transport should therefore only accept messages when it is ready to
start processing them immediately.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]