You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Sebastjan Trepca <tr...@gmail.com> on 2007/10/22 13:42:22 UTC
Problems with acknowledge mode order (STOMP)
Hi all,
I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
STOMP protocol. I'm using a queue with async mode on.
I'm also using these headers:
SUBSCRIBE
activemq.dispatchAsync:'true'
activemq.noLocal:'true',
activemq.retroactive:'true',
activemq.prefetchSize:1000,
activemq.maximumPendingMessageLimit:1000,
MESSAGE
expires:0,
persistent:'true',
priority:0,
The problem occurs when I try to acknowledge messages in different
order then they were sent.
So if producer sends messages with IDs:
1
2
3
I have to acknowledge them in the same order:
1
2
3
Or else I get this error:
ERROR org.apache.activemq.transport.stomp.ProtocolException:
Unexpected ACK received for message-id
[ID:localhost-47986-1193059223135-3:5:-1:1:26055]
at org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
at org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
at org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
at java.lang.Thread.run(Thread.java:619)
Is this a feature or a bug? Do I need to set some extra settings?
Thanks, Sebastjan
Re: Problems with acknowledge mode order (STOMP)
Posted by Roger Hoover <ro...@gmail.com>.
Sorry, for question #2, I mean "Is this a bug or an intentional design?"
On Fri, Jan 23, 2009 at 1:18 AM, Roger Hoover <ro...@gmail.com>wrote:
> I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
>
> Two questions:
> 1) It seems like broker is accepting the ACK and erroneously replying with
> the ERROR message. Is that correct?
> 2) Is this a bug and an intentional design to disallow STOMP clients from
> handle messages concurrently?
>
> Any insight is appreciated. Thanks,
>
> Roger
>
>
> On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <tr...@gmail.com>wrote:
>
>> Hi all,
>>
>> I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
>> STOMP protocol. I'm using a queue with async mode on.
>>
>> I'm also using these headers:
>>
>> SUBSCRIBE
>> activemq.dispatchAsync:'true'
>> activemq.noLocal:'true',
>> activemq.retroactive:'true',
>> activemq.prefetchSize:1000,
>> activemq.maximumPendingMessageLimit:1000,
>>
>> MESSAGE
>> expires:0,
>> persistent:'true',
>> priority:0,
>>
>>
>>
>> The problem occurs when I try to acknowledge messages in different
>> order then they were sent.
>>
>> So if producer sends messages with IDs:
>> 1
>> 2
>> 3
>>
>>
>> I have to acknowledge them in the same order:
>> 1
>> 2
>> 3
>>
>> Or else I get this error:
>>
>> ERROR org.apache.activemq.transport.stomp.ProtocolException:
>> Unexpected ACK received for message-id
>> [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
>> at
>> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
>> at
>> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
>> at
>> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
>> at
>> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
>> at
>> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
>> at java.lang.Thread.run(Thread.java:619)
>>
>> Is this a feature or a bug? Do I need to set some extra settings?
>>
>> Thanks, Sebastjan
>>
>
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Roger Hoover <ro...@gmail.com>.
Thanks. That works!
On Mon, Feb 9, 2009 at 3:10 AM, Dejan Bosanac <de...@nighttale.net> wrote:
> Hi Roger,
>
> this is the normal behavior of the "client" acknowledgment mode. The broker
> acknowledges all messages up to the one you specified. So when you ack
> message 3, message 2 is also acked so when you try to ack it later again
> you
> receive an error.
>
> The solution for your use case would be to use "client-individual" ack mode
> as described here
>
> http://issues.apache.org/activemq/browse/AMQ-1874
>
> Unfortunately it isn't document anywhere, but I have it now on my todo
> list.
>
> Cheers
> --
> Dejan Bosanac
>
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
>
>
> On Sat, Feb 7, 2009 at 3:58 AM, Roger Hoover <ro...@gmail.com>
> wrote:
>
> > Hi Dejan,
> >
> > Thanks again for the quick response. Here is a very simple Perl unit
> test
> > that illustrates the bug. I don't do too much work with Java so if you
> > really don't mind translating it, I appreciate it.
> >
> > Thanks,
> >
> > Roger
> >
> > #!/usr/bin/env perl
> >
> > use strict;
> > use Net::Stomp;
> > use Data::Dumper;
> > use Test::More tests => 1;
> >
> > my $stomp = Net::Stomp->new( { 'hostname' => 'localhost', 'port' =>
> '61613'
> > } );
> > $stomp->connect( { 'login' => 'hello', 'passcode' => 'there' } );
> >
> > #Make sure queue is empty from previous tests
> > while($stomp->can_read({'timeout' => 1})) {
> > $stomp->receive_frame();
> > }
> >
> > # Enqueue three test messages
> > $stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
> > 'message1' } );
> > $stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
> > 'message2' } );
> > $stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
> > 'message3' } );
> >
> > # Subscribe to the queue (with prefetchSize >= 3) and receive the three
> > test
> > messages
> > $stomp->subscribe(
> > { destination => '/queue/testOutOfOrderAck',
> > 'ack' => 'client',
> > 'activemq.prefetchSize' => 10
> > }
> > );
> > my $frame1 = $stomp->receive_frame();
> > my $frame2 = $stomp->receive_frame();
> > my $frame3 = $stomp->receive_frame();
> >
> > #Ack messages out of order (specifically, ack message 2 after message 3)
> > $stomp->ack({'frame' => $frame1});
> > $stomp->ack({'frame' => $frame3});
> > $stomp->ack({'frame' => $frame2});
> >
> > my $error = 0;
> > #Wait max of 1 second for the broker to send an error frame
> > if ($stomp->can_read({'timeout' => 1})) {
> > my $frame = $stomp->receive_frame();
> > if ($frame->{'command'} eq 'ERROR') {
> > $error = 1;
> > print "Received error: " . Dumper($frame);
> > }
> > }
> > $stomp->disconnect;
> >
> > #Assert that no error was received
> > ok(!$error, "Ack previous message after prior message");
> >
> > On Mon, Jan 26, 2009 at 12:19 AM, Dejan Bosanac <de...@nighttale.net>
> > wrote:
> >
> > > It would be ideal to create a test case using simple Java API
> > >
> > > http://activemq.apache.org/stomp.html#Stomp-JavaAPI
> > >
> > > and add it to the
> > >
> > >
> > >
> >
> http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java?view=markup
> > >
> > > If Perl is easier for you, just send it and I'll translate it to the
> Java
> > > test case.
> > >
> > > Cheers
> > > --
> > > Dejan Bosanac
> > >
> > > Open Source Integration - http://fusesource.com/
> > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > Blog - http://www.nighttale.net
> > >
> > >
> > > On Fri, Jan 23, 2009 at 7:24 PM, Roger Hoover <roger.hoover@gmail.com
> > > >wrote:
> > >
> > > > Hi Dejan,
> > > >
> > > > Thanks for the reply. Do you need it in a particular language? I
> > could
> > > > easily create a test case in Perl for it.
> > > >
> > > > Roger
> > > >
> > > > On Fri, Jan 23, 2009 at 8:31 AM, Dejan Bosanac <de...@nighttale.net>
> > > > wrote:
> > > >
> > > > > It shouldn't behave that way. Can you create a test case to
> simulate
> > > this
> > > > > behavior?
> > > > >
> > > > > Cheers
> > > > > --
> > > > > Dejan Bosanac
> > > > >
> > > > > Open Source Integration - http://fusesource.com/
> > > > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > > > Blog - http://www.nighttale.net
> > > > >
> > > > >
> > > > > On Fri, Jan 23, 2009 at 10:18 AM, Roger Hoover <
> > roger.hoover@gmail.com
> > > > > >wrote:
> > > > >
> > > > > > I'm experiencing the same issue, both on ActiveMQ 4.1.1 and
> 5.2.0.
> > > > > >
> > > > > > Two questions:
> > > > > > 1) It seems like broker is accepting the ACK and erroneously
> > replying
> > > > > with
> > > > > > the ERROR message. Is that correct?
> > > > > > 2) Is this a bug and an intentional design to disallow STOMP
> > clients
> > > > from
> > > > > > handle messages concurrently?
> > > > > >
> > > > > > Any insight is appreciated. Thanks,
> > > > > >
> > > > > > Roger
> > > > > >
> > > > > > On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <
> > trepca@gmail.com>
> > > > > > wrote:
> > > > > >
> > > > > > > Hi all,
> > > > > > >
> > > > > > > I'm having problems with acknowledge order in ActiveMQ 4.1.1
> > using
> > > > > > > STOMP protocol. I'm using a queue with async mode on.
> > > > > > >
> > > > > > > I'm also using these headers:
> > > > > > >
> > > > > > > SUBSCRIBE
> > > > > > > activemq.dispatchAsync:'true'
> > > > > > > activemq.noLocal:'true',
> > > > > > > activemq.retroactive:'true',
> > > > > > > activemq.prefetchSize:1000,
> > > > > > > activemq.maximumPendingMessageLimit:1000,
> > > > > > >
> > > > > > > MESSAGE
> > > > > > > expires:0,
> > > > > > > persistent:'true',
> > > > > > > priority:0,
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > The problem occurs when I try to acknowledge messages in
> > different
> > > > > > > order then they were sent.
> > > > > > >
> > > > > > > So if producer sends messages with IDs:
> > > > > > > 1
> > > > > > > 2
> > > > > > > 3
> > > > > > >
> > > > > > >
> > > > > > > I have to acknowledge them in the same order:
> > > > > > > 1
> > > > > > > 2
> > > > > > > 3
> > > > > > >
> > > > > > > Or else I get this error:
> > > > > > >
> > > > > > > ERROR org.apache.activemq.transport.stomp.ProtocolException:
> > > > > > > Unexpected ACK received for message-id
> > > > > > > [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> > > > > > > at java.lang.Thread.run(Thread.java:619)
> > > > > > >
> > > > > > > Is this a feature or a bug? Do I need to set some extra
> settings?
> > > > > > >
> > > > > > > Thanks, Sebastjan
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Dejan Bosanac <de...@nighttale.net>.
Hi Roger,
this is the normal behavior of the "client" acknowledgment mode. The broker
acknowledges all messages up to the one you specified. So when you ack
message 3, message 2 is also acked so when you try to ack it later again you
receive an error.
The solution for your use case would be to use "client-individual" ack mode
as described here
http://issues.apache.org/activemq/browse/AMQ-1874
Unfortunately it isn't document anywhere, but I have it now on my todo list.
Cheers
--
Dejan Bosanac
Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net
On Sat, Feb 7, 2009 at 3:58 AM, Roger Hoover <ro...@gmail.com> wrote:
> Hi Dejan,
>
> Thanks again for the quick response. Here is a very simple Perl unit test
> that illustrates the bug. I don't do too much work with Java so if you
> really don't mind translating it, I appreciate it.
>
> Thanks,
>
> Roger
>
> #!/usr/bin/env perl
>
> use strict;
> use Net::Stomp;
> use Data::Dumper;
> use Test::More tests => 1;
>
> my $stomp = Net::Stomp->new( { 'hostname' => 'localhost', 'port' => '61613'
> } );
> $stomp->connect( { 'login' => 'hello', 'passcode' => 'there' } );
>
> #Make sure queue is empty from previous tests
> while($stomp->can_read({'timeout' => 1})) {
> $stomp->receive_frame();
> }
>
> # Enqueue three test messages
> $stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
> 'message1' } );
> $stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
> 'message2' } );
> $stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
> 'message3' } );
>
> # Subscribe to the queue (with prefetchSize >= 3) and receive the three
> test
> messages
> $stomp->subscribe(
> { destination => '/queue/testOutOfOrderAck',
> 'ack' => 'client',
> 'activemq.prefetchSize' => 10
> }
> );
> my $frame1 = $stomp->receive_frame();
> my $frame2 = $stomp->receive_frame();
> my $frame3 = $stomp->receive_frame();
>
> #Ack messages out of order (specifically, ack message 2 after message 3)
> $stomp->ack({'frame' => $frame1});
> $stomp->ack({'frame' => $frame3});
> $stomp->ack({'frame' => $frame2});
>
> my $error = 0;
> #Wait max of 1 second for the broker to send an error frame
> if ($stomp->can_read({'timeout' => 1})) {
> my $frame = $stomp->receive_frame();
> if ($frame->{'command'} eq 'ERROR') {
> $error = 1;
> print "Received error: " . Dumper($frame);
> }
> }
> $stomp->disconnect;
>
> #Assert that no error was received
> ok(!$error, "Ack previous message after prior message");
>
> On Mon, Jan 26, 2009 at 12:19 AM, Dejan Bosanac <de...@nighttale.net>
> wrote:
>
> > It would be ideal to create a test case using simple Java API
> >
> > http://activemq.apache.org/stomp.html#Stomp-JavaAPI
> >
> > and add it to the
> >
> >
> >
> http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java?view=markup
> >
> > If Perl is easier for you, just send it and I'll translate it to the Java
> > test case.
> >
> > Cheers
> > --
> > Dejan Bosanac
> >
> > Open Source Integration - http://fusesource.com/
> > ActiveMQ in Action - http://www.manning.com/snyder/
> > Blog - http://www.nighttale.net
> >
> >
> > On Fri, Jan 23, 2009 at 7:24 PM, Roger Hoover <roger.hoover@gmail.com
> > >wrote:
> >
> > > Hi Dejan,
> > >
> > > Thanks for the reply. Do you need it in a particular language? I
> could
> > > easily create a test case in Perl for it.
> > >
> > > Roger
> > >
> > > On Fri, Jan 23, 2009 at 8:31 AM, Dejan Bosanac <de...@nighttale.net>
> > > wrote:
> > >
> > > > It shouldn't behave that way. Can you create a test case to simulate
> > this
> > > > behavior?
> > > >
> > > > Cheers
> > > > --
> > > > Dejan Bosanac
> > > >
> > > > Open Source Integration - http://fusesource.com/
> > > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > > Blog - http://www.nighttale.net
> > > >
> > > >
> > > > On Fri, Jan 23, 2009 at 10:18 AM, Roger Hoover <
> roger.hoover@gmail.com
> > > > >wrote:
> > > >
> > > > > I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
> > > > >
> > > > > Two questions:
> > > > > 1) It seems like broker is accepting the ACK and erroneously
> replying
> > > > with
> > > > > the ERROR message. Is that correct?
> > > > > 2) Is this a bug and an intentional design to disallow STOMP
> clients
> > > from
> > > > > handle messages concurrently?
> > > > >
> > > > > Any insight is appreciated. Thanks,
> > > > >
> > > > > Roger
> > > > >
> > > > > On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <
> trepca@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > Hi all,
> > > > > >
> > > > > > I'm having problems with acknowledge order in ActiveMQ 4.1.1
> using
> > > > > > STOMP protocol. I'm using a queue with async mode on.
> > > > > >
> > > > > > I'm also using these headers:
> > > > > >
> > > > > > SUBSCRIBE
> > > > > > activemq.dispatchAsync:'true'
> > > > > > activemq.noLocal:'true',
> > > > > > activemq.retroactive:'true',
> > > > > > activemq.prefetchSize:1000,
> > > > > > activemq.maximumPendingMessageLimit:1000,
> > > > > >
> > > > > > MESSAGE
> > > > > > expires:0,
> > > > > > persistent:'true',
> > > > > > priority:0,
> > > > > >
> > > > > >
> > > > > >
> > > > > > The problem occurs when I try to acknowledge messages in
> different
> > > > > > order then they were sent.
> > > > > >
> > > > > > So if producer sends messages with IDs:
> > > > > > 1
> > > > > > 2
> > > > > > 3
> > > > > >
> > > > > >
> > > > > > I have to acknowledge them in the same order:
> > > > > > 1
> > > > > > 2
> > > > > > 3
> > > > > >
> > > > > > Or else I get this error:
> > > > > >
> > > > > > ERROR org.apache.activemq.transport.stomp.ProtocolException:
> > > > > > Unexpected ACK received for message-id
> > > > > > [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> > > > > > at
> > > > > >
> > > >
> > org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> > > > > > at java.lang.Thread.run(Thread.java:619)
> > > > > >
> > > > > > Is this a feature or a bug? Do I need to set some extra settings?
> > > > > >
> > > > > > Thanks, Sebastjan
> > > > > >
> > > > >
> > > >
> > >
> >
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Roger Hoover <ro...@gmail.com>.
Hi Dejan,
Thanks again for the quick response. Here is a very simple Perl unit test
that illustrates the bug. I don't do too much work with Java so if you
really don't mind translating it, I appreciate it.
Thanks,
Roger
#!/usr/bin/env perl
use strict;
use Net::Stomp;
use Data::Dumper;
use Test::More tests => 1;
my $stomp = Net::Stomp->new( { 'hostname' => 'localhost', 'port' => '61613'
} );
$stomp->connect( { 'login' => 'hello', 'passcode' => 'there' } );
#Make sure queue is empty from previous tests
while($stomp->can_read({'timeout' => 1})) {
$stomp->receive_frame();
}
# Enqueue three test messages
$stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
'message1' } );
$stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
'message2' } );
$stomp->send({ 'destination' => '/queue/testOutOfOrderAck', 'body' =>
'message3' } );
# Subscribe to the queue (with prefetchSize >= 3) and receive the three test
messages
$stomp->subscribe(
{ destination => '/queue/testOutOfOrderAck',
'ack' => 'client',
'activemq.prefetchSize' => 10
}
);
my $frame1 = $stomp->receive_frame();
my $frame2 = $stomp->receive_frame();
my $frame3 = $stomp->receive_frame();
#Ack messages out of order (specifically, ack message 2 after message 3)
$stomp->ack({'frame' => $frame1});
$stomp->ack({'frame' => $frame3});
$stomp->ack({'frame' => $frame2});
my $error = 0;
#Wait max of 1 second for the broker to send an error frame
if ($stomp->can_read({'timeout' => 1})) {
my $frame = $stomp->receive_frame();
if ($frame->{'command'} eq 'ERROR') {
$error = 1;
print "Received error: " . Dumper($frame);
}
}
$stomp->disconnect;
#Assert that no error was received
ok(!$error, "Ack previous message after prior message");
On Mon, Jan 26, 2009 at 12:19 AM, Dejan Bosanac <de...@nighttale.net> wrote:
> It would be ideal to create a test case using simple Java API
>
> http://activemq.apache.org/stomp.html#Stomp-JavaAPI
>
> and add it to the
>
>
> http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java?view=markup
>
> If Perl is easier for you, just send it and I'll translate it to the Java
> test case.
>
> Cheers
> --
> Dejan Bosanac
>
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
>
>
> On Fri, Jan 23, 2009 at 7:24 PM, Roger Hoover <roger.hoover@gmail.com
> >wrote:
>
> > Hi Dejan,
> >
> > Thanks for the reply. Do you need it in a particular language? I could
> > easily create a test case in Perl for it.
> >
> > Roger
> >
> > On Fri, Jan 23, 2009 at 8:31 AM, Dejan Bosanac <de...@nighttale.net>
> > wrote:
> >
> > > It shouldn't behave that way. Can you create a test case to simulate
> this
> > > behavior?
> > >
> > > Cheers
> > > --
> > > Dejan Bosanac
> > >
> > > Open Source Integration - http://fusesource.com/
> > > ActiveMQ in Action - http://www.manning.com/snyder/
> > > Blog - http://www.nighttale.net
> > >
> > >
> > > On Fri, Jan 23, 2009 at 10:18 AM, Roger Hoover <roger.hoover@gmail.com
> > > >wrote:
> > >
> > > > I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
> > > >
> > > > Two questions:
> > > > 1) It seems like broker is accepting the ACK and erroneously replying
> > > with
> > > > the ERROR message. Is that correct?
> > > > 2) Is this a bug and an intentional design to disallow STOMP clients
> > from
> > > > handle messages concurrently?
> > > >
> > > > Any insight is appreciated. Thanks,
> > > >
> > > > Roger
> > > >
> > > > On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <tr...@gmail.com>
> > > > wrote:
> > > >
> > > > > Hi all,
> > > > >
> > > > > I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
> > > > > STOMP protocol. I'm using a queue with async mode on.
> > > > >
> > > > > I'm also using these headers:
> > > > >
> > > > > SUBSCRIBE
> > > > > activemq.dispatchAsync:'true'
> > > > > activemq.noLocal:'true',
> > > > > activemq.retroactive:'true',
> > > > > activemq.prefetchSize:1000,
> > > > > activemq.maximumPendingMessageLimit:1000,
> > > > >
> > > > > MESSAGE
> > > > > expires:0,
> > > > > persistent:'true',
> > > > > priority:0,
> > > > >
> > > > >
> > > > >
> > > > > The problem occurs when I try to acknowledge messages in different
> > > > > order then they were sent.
> > > > >
> > > > > So if producer sends messages with IDs:
> > > > > 1
> > > > > 2
> > > > > 3
> > > > >
> > > > >
> > > > > I have to acknowledge them in the same order:
> > > > > 1
> > > > > 2
> > > > > 3
> > > > >
> > > > > Or else I get this error:
> > > > >
> > > > > ERROR org.apache.activemq.transport.stomp.ProtocolException:
> > > > > Unexpected ACK received for message-id
> > > > > [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> > > > > at
> > > > >
> > >
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> > > > > at java.lang.Thread.run(Thread.java:619)
> > > > >
> > > > > Is this a feature or a bug? Do I need to set some extra settings?
> > > > >
> > > > > Thanks, Sebastjan
> > > > >
> > > >
> > >
> >
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Dejan Bosanac <de...@nighttale.net>.
It would be ideal to create a test case using simple Java API
http://activemq.apache.org/stomp.html#Stomp-JavaAPI
and add it to the
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java?view=markup
If Perl is easier for you, just send it and I'll translate it to the Java
test case.
Cheers
--
Dejan Bosanac
Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net
On Fri, Jan 23, 2009 at 7:24 PM, Roger Hoover <ro...@gmail.com>wrote:
> Hi Dejan,
>
> Thanks for the reply. Do you need it in a particular language? I could
> easily create a test case in Perl for it.
>
> Roger
>
> On Fri, Jan 23, 2009 at 8:31 AM, Dejan Bosanac <de...@nighttale.net>
> wrote:
>
> > It shouldn't behave that way. Can you create a test case to simulate this
> > behavior?
> >
> > Cheers
> > --
> > Dejan Bosanac
> >
> > Open Source Integration - http://fusesource.com/
> > ActiveMQ in Action - http://www.manning.com/snyder/
> > Blog - http://www.nighttale.net
> >
> >
> > On Fri, Jan 23, 2009 at 10:18 AM, Roger Hoover <roger.hoover@gmail.com
> > >wrote:
> >
> > > I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
> > >
> > > Two questions:
> > > 1) It seems like broker is accepting the ACK and erroneously replying
> > with
> > > the ERROR message. Is that correct?
> > > 2) Is this a bug and an intentional design to disallow STOMP clients
> from
> > > handle messages concurrently?
> > >
> > > Any insight is appreciated. Thanks,
> > >
> > > Roger
> > >
> > > On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <tr...@gmail.com>
> > > wrote:
> > >
> > > > Hi all,
> > > >
> > > > I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
> > > > STOMP protocol. I'm using a queue with async mode on.
> > > >
> > > > I'm also using these headers:
> > > >
> > > > SUBSCRIBE
> > > > activemq.dispatchAsync:'true'
> > > > activemq.noLocal:'true',
> > > > activemq.retroactive:'true',
> > > > activemq.prefetchSize:1000,
> > > > activemq.maximumPendingMessageLimit:1000,
> > > >
> > > > MESSAGE
> > > > expires:0,
> > > > persistent:'true',
> > > > priority:0,
> > > >
> > > >
> > > >
> > > > The problem occurs when I try to acknowledge messages in different
> > > > order then they were sent.
> > > >
> > > > So if producer sends messages with IDs:
> > > > 1
> > > > 2
> > > > 3
> > > >
> > > >
> > > > I have to acknowledge them in the same order:
> > > > 1
> > > > 2
> > > > 3
> > > >
> > > > Or else I get this error:
> > > >
> > > > ERROR org.apache.activemq.transport.stomp.ProtocolException:
> > > > Unexpected ACK received for message-id
> > > > [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> > > > at
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> > > > at
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> > > > at
> > > >
> > >
> >
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> > > > at
> > > >
> > >
> >
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> > > > at
> > > >
> > org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> > > > at java.lang.Thread.run(Thread.java:619)
> > > >
> > > > Is this a feature or a bug? Do I need to set some extra settings?
> > > >
> > > > Thanks, Sebastjan
> > > >
> > >
> >
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Roger Hoover <ro...@gmail.com>.
Hi Dejan,
Thanks for the reply. Do you need it in a particular language? I could
easily create a test case in Perl for it.
Roger
On Fri, Jan 23, 2009 at 8:31 AM, Dejan Bosanac <de...@nighttale.net> wrote:
> It shouldn't behave that way. Can you create a test case to simulate this
> behavior?
>
> Cheers
> --
> Dejan Bosanac
>
> Open Source Integration - http://fusesource.com/
> ActiveMQ in Action - http://www.manning.com/snyder/
> Blog - http://www.nighttale.net
>
>
> On Fri, Jan 23, 2009 at 10:18 AM, Roger Hoover <roger.hoover@gmail.com
> >wrote:
>
> > I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
> >
> > Two questions:
> > 1) It seems like broker is accepting the ACK and erroneously replying
> with
> > the ERROR message. Is that correct?
> > 2) Is this a bug and an intentional design to disallow STOMP clients from
> > handle messages concurrently?
> >
> > Any insight is appreciated. Thanks,
> >
> > Roger
> >
> > On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <tr...@gmail.com>
> > wrote:
> >
> > > Hi all,
> > >
> > > I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
> > > STOMP protocol. I'm using a queue with async mode on.
> > >
> > > I'm also using these headers:
> > >
> > > SUBSCRIBE
> > > activemq.dispatchAsync:'true'
> > > activemq.noLocal:'true',
> > > activemq.retroactive:'true',
> > > activemq.prefetchSize:1000,
> > > activemq.maximumPendingMessageLimit:1000,
> > >
> > > MESSAGE
> > > expires:0,
> > > persistent:'true',
> > > priority:0,
> > >
> > >
> > >
> > > The problem occurs when I try to acknowledge messages in different
> > > order then they were sent.
> > >
> > > So if producer sends messages with IDs:
> > > 1
> > > 2
> > > 3
> > >
> > >
> > > I have to acknowledge them in the same order:
> > > 1
> > > 2
> > > 3
> > >
> > > Or else I get this error:
> > >
> > > ERROR org.apache.activemq.transport.stomp.ProtocolException:
> > > Unexpected ACK received for message-id
> > > [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> > > at
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> > > at
> > >
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> > > at
> > >
> >
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> > > at
> > >
> >
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> > > at
> > >
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> > > at java.lang.Thread.run(Thread.java:619)
> > >
> > > Is this a feature or a bug? Do I need to set some extra settings?
> > >
> > > Thanks, Sebastjan
> > >
> >
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Dejan Bosanac <de...@nighttale.net>.
It shouldn't behave that way. Can you create a test case to simulate this
behavior?
Cheers
--
Dejan Bosanac
Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net
On Fri, Jan 23, 2009 at 10:18 AM, Roger Hoover <ro...@gmail.com>wrote:
> I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
>
> Two questions:
> 1) It seems like broker is accepting the ACK and erroneously replying with
> the ERROR message. Is that correct?
> 2) Is this a bug and an intentional design to disallow STOMP clients from
> handle messages concurrently?
>
> Any insight is appreciated. Thanks,
>
> Roger
>
> On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <tr...@gmail.com>
> wrote:
>
> > Hi all,
> >
> > I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
> > STOMP protocol. I'm using a queue with async mode on.
> >
> > I'm also using these headers:
> >
> > SUBSCRIBE
> > activemq.dispatchAsync:'true'
> > activemq.noLocal:'true',
> > activemq.retroactive:'true',
> > activemq.prefetchSize:1000,
> > activemq.maximumPendingMessageLimit:1000,
> >
> > MESSAGE
> > expires:0,
> > persistent:'true',
> > priority:0,
> >
> >
> >
> > The problem occurs when I try to acknowledge messages in different
> > order then they were sent.
> >
> > So if producer sends messages with IDs:
> > 1
> > 2
> > 3
> >
> >
> > I have to acknowledge them in the same order:
> > 1
> > 2
> > 3
> >
> > Or else I get this error:
> >
> > ERROR org.apache.activemq.transport.stomp.ProtocolException:
> > Unexpected ACK received for message-id
> > [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> > at
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> > at
> >
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> > at
> >
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> > at
> >
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> > at
> > org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> > at java.lang.Thread.run(Thread.java:619)
> >
> > Is this a feature or a bug? Do I need to set some extra settings?
> >
> > Thanks, Sebastjan
> >
>
Re: Problems with acknowledge mode order (STOMP)
Posted by Roger Hoover <ro...@gmail.com>.
I'm experiencing the same issue, both on ActiveMQ 4.1.1 and 5.2.0.
Two questions:
1) It seems like broker is accepting the ACK and erroneously replying with
the ERROR message. Is that correct?
2) Is this a bug and an intentional design to disallow STOMP clients from
handle messages concurrently?
Any insight is appreciated. Thanks,
Roger
On Mon, Oct 22, 2007 at 3:42 AM, Sebastjan Trepca <tr...@gmail.com> wrote:
> Hi all,
>
> I'm having problems with acknowledge order in ActiveMQ 4.1.1 using
> STOMP protocol. I'm using a queue with async mode on.
>
> I'm also using these headers:
>
> SUBSCRIBE
> activemq.dispatchAsync:'true'
> activemq.noLocal:'true',
> activemq.retroactive:'true',
> activemq.prefetchSize:1000,
> activemq.maximumPendingMessageLimit:1000,
>
> MESSAGE
> expires:0,
> persistent:'true',
> priority:0,
>
>
>
> The problem occurs when I try to acknowledge messages in different
> order then they were sent.
>
> So if producer sends messages with IDs:
> 1
> 2
> 3
>
>
> I have to acknowledge them in the same order:
> 1
> 2
> 3
>
> Or else I get this error:
>
> ERROR org.apache.activemq.transport.stomp.ProtocolException:
> Unexpected ACK received for message-id
> [ID:localhost-47986-1193059223135-3:5:-1:1:26055]
> at
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:242)
> at
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommad(ProtocolConverter.java:141)
> at
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
> at
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
> at java.lang.Thread.run(Thread.java:619)
>
> Is this a feature or a bug? Do I need to set some extra settings?
>
> Thanks, Sebastjan
>