[
https://issues.apache.org/jira/browse/ARTEMIS-3526?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jelmer updated ARTEMIS-3526:
----------------------------
Description:
It seems that not "well behaved" consumers can cause messages to get stuck in a
delivering-status on a queue. It seems like the following can occur (sample
code follows):
1) Create a xa-connection/xa-session to an Artemis broker
2) Create a consumer on a queue on this Broker.
3) Start the "xa-transaction"
4) Consume a message
5) End the "xa-transaction"
6) Initiate a "xa-prepare" for the two-phase commit
7) DO NOT initiate a "xa-commit" (the consumer is not wel behaved or gets
killed half way through the process).
In code (partial and based on the XAReceiveExample from the Artemis-samples):
{code:java}
try (final XAConnection xaconnection = createXAConnection(xacf);
final XASession xaSession = createXASession(xaconnection)) {
final MessageConsumer consumer = xaSession.createConsumer(queue);
final Xid xid = createXid();
final XAResource xaRes = xaSession.getXAResource();
xaRes.start(xid, XAResource.TMNOFLAGS);
final Message message = consumer.receive(2000);
System.out.println("MESSAGE CONSUMED [" + message.getJMSMessageID() + "]");
xaRes.end(xid, XAResource.TMSUCCESS);
xaRes.prepare(xid);
//xaRes.commit(xid, false);
System.out.println("MESSAGE SORT OF COMMITTED [" + message.getJMSMessageID()
+ "]");
} {code}
After this the message seems to be stuck on the queue because it is still being
delivered to a consumer which is already gone. They show up in the queue
metrics but the contents cannot be seen, queried, consumed etc. We can see them
using "artemis data exp" however.
We have the following questions:
1) Is there a way to get these messages out of this state i..e. route them to
an expiry-queue after 24 hours or manualy ?
2) Is there (apart from "artemis data exp") a way to see the content ?
was:
It seems that not "well behaved" consumers can cause messages to get stuck in a
delivering-status on a queue. It seems like the following can occur (sample
code follows):
1) Create a xa-connection/xa-session to an Artemis broker
2) Create a consumer on a queue on this Broker.
3) Start the "xa-transaction"
4) Consume a message
5) End the "xa-transaction"
6) Initiate a "xa-prepare" for the two-phase commit
7) DO NOT initiate a "xa-commit" (the consumer is not wel behaved or gets
killed half way through the process).
In code (partial and based on the XAReceiveExample from the Artemis-samples):
{code:java}
try (final XAConnection xaconnection = createXAConnection(xacf);
final XASession xaSession = createXASession(xaconnection)) {
final MessageConsumer consumer = xaSession.createConsumer(queue);
final Xid xid = createXid();
final XAResource xaRes = xaSession.getXAResource();
xaRes.start(xid, XAResource.TMNOFLAGS);
final Message message = consumer.receive(2000);
System.out.println("MESSAGE CONSUMED [" + message.getJMSMessageID() + "]");
xaRes.end(xid, XAResource.TMSUCCESS);
xaRes.prepare(xid);
//xaRes.commit(xid, false);
System.out.println("MESSAGE SORT OF COMMITTED [" + message.getJMSMessageID()
+ "]");
} {code}
After this the message seems to be stuck on the queue because it is still being
delivered to a consumer which is already gone. They show up in the queue
metrics but the contents cannot be seen, queried, consumed etc. We can see them
using "artemis data exp" however.
We have the following questions:
1) Is there a way to get these messages out of this state .i..e. route them to
an expiry-queue after 24 hours or manualy ?
2) Is there (apart from "artemis data exp") a way to see the content ?
> Messages get stuck in delivering status on a queue.
> ---------------------------------------------------
>
> Key: ARTEMIS-3526
> URL: https://issues.apache.org/jira/browse/ARTEMIS-3526
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: Broker
> Affects Versions: 2.18.0
> Reporter: Jelmer
> Priority: Minor
>
> It seems that not "well behaved" consumers can cause messages to get stuck in
> a delivering-status on a queue. It seems like the following can occur (sample
> code follows):
> 1) Create a xa-connection/xa-session to an Artemis broker
> 2) Create a consumer on a queue on this Broker.
> 3) Start the "xa-transaction"
> 4) Consume a message
> 5) End the "xa-transaction"
> 6) Initiate a "xa-prepare" for the two-phase commit
> 7) DO NOT initiate a "xa-commit" (the consumer is not wel behaved or gets
> killed half way through the process).
>
> In code (partial and based on the XAReceiveExample from the Artemis-samples):
> {code:java}
> try (final XAConnection xaconnection = createXAConnection(xacf);
> final XASession xaSession = createXASession(xaconnection)) {
> final MessageConsumer consumer = xaSession.createConsumer(queue);
> final Xid xid = createXid();
> final XAResource xaRes = xaSession.getXAResource();
> xaRes.start(xid, XAResource.TMNOFLAGS);
> final Message message = consumer.receive(2000);
> System.out.println("MESSAGE CONSUMED [" + message.getJMSMessageID() + "]");
> xaRes.end(xid, XAResource.TMSUCCESS);
> xaRes.prepare(xid);
> //xaRes.commit(xid, false);
> System.out.println("MESSAGE SORT OF COMMITTED [" +
> message.getJMSMessageID() + "]");
> } {code}
> After this the message seems to be stuck on the queue because it is still
> being delivered to a consumer which is already gone. They show up in the
> queue metrics but the contents cannot be seen, queried, consumed etc. We can
> see them using "artemis data exp" however.
>
> We have the following questions:
> 1) Is there a way to get these messages out of this state i..e. route them to
> an expiry-queue after 24 hours or manualy ?
> 2) Is there (apart from "artemis data exp") a way to see the content ?
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)