You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Celso Pinto <cp...@7syntax.com> on 2008/06/17 23:28:58 UTC

activemq stops dispatching messages aborting transaction (STOMP)

Hi all,

I'm currently struggling to understand the reason behind that's causing
the behaviour described in the subject: I'm connecting to activemq via
stomp on a python app. Because I need to have the messages rolled back
in case of some processing failure I'm wrapping the message processing
in the following way:

 message received -> start transaction -> ack message in transaction ->
process message -> if no exception commit tx, else rollback transaction


AFAIK, this is the only way of making message unacknowledgement possible
with stomp. Also, this is a single client connection, ie. I'm using a
single client connection to create a message processing daemon, all
messages are sent and received via this single connection to the MQ
server.

Here's a telnet session that can be used to reproduce the problem (open
jconsole and send 5 text messages to the queue):

% telnet localhost 61613
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
CONNECT

^@
CONNECTED
session:ID:starfish-53281-1213736462979-2:2


SUBSCRIBE
destination: /queue/testq
ack: client
activemq.prefetchSize: 1

^@
MESSAGE
message-id:ID:starfish-53281-1213736462979-3:3:1:1:1
destination:/queue/testq
timestamp:1213736837743
expires:0
priority:0

1
BEGIN
transaction: 1

^@
ACK
message-id:ID:starfish-53281-1213736462979-3:3:1:1:1
transaction: 1

^@
MESSAGE
message-id:ID:starfish-53281-1213736462979-3:4:1:1:1
destination:/queue/testq
timestamp:1213736840224
expires:0
priority:0

2
MESSAGE
message-id:ID:starfish-53281-1213736462979-3:5:1:1:1
destination:/queue/testq
timestamp:1213736842611
expires:0
priority:0

3
ABORT   
transaction: 1

^@
BEGIN 
transaction:2

^@
ACK
message-id:ID:starfish-53281-1213736462979-3:4:1:1:1
transaction:2

^@
ABORT
transaction:2

^@
ACK
message-id:ID:starfish-53281-1213736462979-3:5:1:1:1

^@


I see a couple of issues here:

#1) even though I specified activemq.prefetchSize to 1 in the
subscription command, the connector dispatches two messages in a row

#2) no more messages are dispatched after aborting the
transaction/acknowledging the last received message. Even if the second
message isn't wrapped in a transaction, message dispatch stops there.

To add to the confusion, if I don't use transactions _at all_, my client
keeps getting messages, one by one, ie. no two messages are sent
together, I only get a new message after ACK'ing the previous one.

I think I may be stepping into the realms of a buggy STOMP connector.
Please tell me if I'm missing something obvious that fixes this issue
(hence making it a non-issue) or if indeed the STOMP connector has
problems.

TIA,
Celso



Re: activemq stops dispatching messages aborting transaction (STOMP)

Posted by Dejan Bosanac <de...@nighttale.net>.
Hi Celso,

can you open a JIRA for this issue?

Thanks
-- 
Dejan Bosanac
www.scriptinginjava.net

On Tue, Jun 17, 2008 at 11:28 PM, Celso Pinto <cp...@7syntax.com> wrote:

> Hi all,
>
> I'm currently struggling to understand the reason behind that's causing
> the behaviour described in the subject: I'm connecting to activemq via
> stomp on a python app. Because I need to have the messages rolled back
> in case of some processing failure I'm wrapping the message processing
> in the following way:
>
>  message received -> start transaction -> ack message in transaction ->
> process message -> if no exception commit tx, else rollback transaction
>
>
> AFAIK, this is the only way of making message unacknowledgement possible
> with stomp. Also, this is a single client connection, ie. I'm using a
> single client connection to create a message processing daemon, all
> messages are sent and received via this single connection to the MQ
> server.
>
> Here's a telnet session that can be used to reproduce the problem (open
> jconsole and send 5 text messages to the queue):
>
> % telnet localhost 61613
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> CONNECT
>
> ^@
> CONNECTED
> session:ID:starfish-53281-1213736462979-2:2
>
>
> SUBSCRIBE
> destination: /queue/testq
> ack: client
> activemq.prefetchSize: 1
>
> ^@
> MESSAGE
> message-id:ID:starfish-53281-1213736462979-3:3:1:1:1
> destination:/queue/testq
> timestamp:1213736837743
> expires:0
> priority:0
>
> 1
> BEGIN
> transaction: 1
>
> ^@
> ACK
> message-id:ID:starfish-53281-1213736462979-3:3:1:1:1
> transaction: 1
>
> ^@
> MESSAGE
> message-id:ID:starfish-53281-1213736462979-3:4:1:1:1
> destination:/queue/testq
> timestamp:1213736840224
> expires:0
> priority:0
>
> 2
> MESSAGE
> message-id:ID:starfish-53281-1213736462979-3:5:1:1:1
> destination:/queue/testq
> timestamp:1213736842611
> expires:0
> priority:0
>
> 3
> ABORT
> transaction: 1
>
> ^@
> BEGIN
> transaction:2
>
> ^@
> ACK
> message-id:ID:starfish-53281-1213736462979-3:4:1:1:1
> transaction:2
>
> ^@
> ABORT
> transaction:2
>
> ^@
> ACK
> message-id:ID:starfish-53281-1213736462979-3:5:1:1:1
>
> ^@
>
>
> I see a couple of issues here:
>
> #1) even though I specified activemq.prefetchSize to 1 in the
> subscription command, the connector dispatches two messages in a row
>
> #2) no more messages are dispatched after aborting the
> transaction/acknowledging the last received message. Even if the second
> message isn't wrapped in a transaction, message dispatch stops there.
>
> To add to the confusion, if I don't use transactions _at all_, my client
> keeps getting messages, one by one, ie. no two messages are sent
> together, I only get a new message after ACK'ing the previous one.
>
> I think I may be stepping into the realms of a buggy STOMP connector.
> Please tell me if I'm missing something obvious that fixes this issue
> (hence making it a non-issue) or if indeed the STOMP connector has
> problems.
>
> TIA,
> Celso
>
>
>