[
https://issues.apache.org/jira/browse/QPID-1770?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689671#action_12689671
]
Rajith Attapattu commented on QPID-1770:
----------------------------------------
The send in the JMS client is not synchronous. So you wouldn't get notify on
the N-th message transfer.
By the time you receive the exception you may have put a few more transfers on
the wire.
If you want the N-th message transfer to fail then you need to do synchronous
publish.
If you are using a durable queue and have marked your messages persistent, then
you could use
-Dsync_publish=persistent or add sync_publish=persistent to the connection URL.
else you could use
-Dsync_publish=all or add sync_publish=all to the connection URL.
Please note that sync publish is very slow compared to async publishing.
> JMS: No useful exception thrown when message is sent to full queue
> ------------------------------------------------------------------
>
> Key: QPID-1770
> URL: https://issues.apache.org/jira/browse/QPID-1770
> Project: Qpid
> Issue Type: Bug
> Components: Java Client
> Affects Versions: M4
> Environment: Redhat with C++ broker
> Reporter: Jeff Stein
> Assignee: Rajith Attapattu
> Priority: Critical
> Fix For: 0.5
>
>
> In JMS, when a message is sent when a queue is already at its maximum size,
> nothing happens for 60 seconds. The program just hangs there. Then,
> suddenly, these two exceptions are thrown:
> org.apache.qpid.transport.SessionException: timed out waiting for session to
> become open (state=DETACHED)
> at org.apache.qpid.transport.Session.invoke(Session.java:442)
> at
> org.apache.qpid.transport.SessionInvoker.messageTransfer(SessionInvoker.java:96)
> at
> org.apache.qpid.client.BasicMessageProducer_0_10.sendMessage(BasicMessageProducer_0_10.java:160)
> at
> org.apache.qpid.client.BasicMessageProducer.sendImpl(BasicMessageProducer.java:465)
> at
> org.apache.qpid.client.BasicMessageProducer.sendImpl(BasicMessageProducer.java:420)
> at
> org.apache.qpid.client.BasicMessageProducer.send(BasicMessageProducer.java:289)
> at Producer.runTest(Producer.java:135)
> at Producer.main(Producer.java:64)
> Producer: Caught an Exception: javax.jms.JMSException: Exception when sending
> message
> javax.jms.JMSException: Exception when sending message
> at
> org.apache.qpid.client.BasicMessageProducer_0_10.sendMessage(BasicMessageProducer_0_10.java:173)
> at
> org.apache.qpid.client.BasicMessageProducer.sendImpl(BasicMessageProducer.java:465)
> at
> org.apache.qpid.client.BasicMessageProducer.sendImpl(BasicMessageProducer.java:420)
> at
> org.apache.qpid.client.BasicMessageProducer.send(BasicMessageProducer.java:289)
> at Producer.runTest(Producer.java:135)
> at Producer.main(Producer.java:64)
> This is in contrast to, for example, a Python qpid producer, which will throw
> an exception as soon as the queue is full, and it will be very specific about
> the problem, telling you the queue is too full, which message overfilled it,
> etc.
> I tested this using a hacked up version of the direct producer/consumer JMS
> example. Just run the producer (without the consumer running) long enough
> with large enough messages so that it will reach the maximum queue size, and
> you should be able to see it.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]