You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Christopher L. Shannon (JIRA)" <ji...@apache.org> on 2016/10/06 11:56:20 UTC

[jira] [Comment Edited] (AMQ-6454) Message is redelivered after succesfull acknowledge()

    [ https://issues.apache.org/jira/browse/AMQ-6454?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15551722#comment-15551722 ] 

Christopher L. Shannon edited comment on AMQ-6454 at 10/6/16 11:55 AM:
-----------------------------------------------------------------------

[~gtully], I've been watching this thread and my first thoughts were what you discovered, that things would break if this behavior changed.  I know I have written code that relies on this behavior (ie closing the consumer will cause redelivery without closing the session)

To me this use case seems a bit odd as a JMS session should not be shared across threads.  The spec is clear in that a session should be single threaded.  So having two different threads receive a message and then try to call acknowledge should be considered invalid anyways in my opinion based on the spec.

That seems to be the fundamental issue in this use case is the timing with the two threads.  If it was a single thread receiving and acknowledge then it could be written in such a way to always call acknowledge before closing.


was (Author: christopher.l.shannon):
[~gtully], I've been watching this thread and my first thoughts were what you discovered, that things would break if this behavior changed.  I know I have written code that relies on this behavior (ie closing the consumer will cause redelivery without closing the session)

To me this use case seems a bit odd as a JMS session should not be shared across threads.  The spec is clear in that a session should be single threaded.  So having two different threads receive a message and then try to call acknowledge should be considered invalid anyways in my opinion based on the spec.

> Message is redelivered after succesfull acknowledge()
> -----------------------------------------------------
>
>                 Key: AMQ-6454
>                 URL: https://issues.apache.org/jira/browse/AMQ-6454
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.14.1
>            Reporter: Yuriy
>         Attachments: activemq-bug.zip
>
>
> JMS message is redelivered after successful call of acknowledge().
> The following methods are invoked:
> Thread1 : Message message = consumer.receive();
> Thread2 : consumer.close();
> Thread1: message.acknowledge();
> All the methods return successfully but the  message is redelivered on the next receive() call. Note that consumer.close() is typically used to force  consumer.receive() to return. 
> According to JMS specification the scope of message acknowledge() call is session (not message consumer):
> https://docs.oracle.com/javaee/7/api/javax/jms/Message.html#acknowledge--
> A simple program to reproduce the bug is attached.
> Observed behavior: 
> Message is redelivered.
> Program output:
> ============
> Message sent. Id=ID:comp-63860-1475602285903-1:1:1:1:1
> Message received. Id=ID:comp-63860-1475602285903-1:1:1:1:1. Text=Welcome!
> Message succesfully acknowledged
> Message received. Id=ID:comp-63860-1475602285903-1:1:1:1:1. Text=Welcome!
> Message succesfully acknowledged
> Expected behavior:
> Message should be delivered only once.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)