Luckily, you don't need access to the code TIBCO BW generates in order to
test this. You can set a breakpoint on the
http://grepcode.com/file/repo1.maven.org/maven2/org.apache.activemq/activemq-all/5.10.0/org/apache/activemq/ActiveMQMessageConsumer.java#ActiveMQMessageConsumer.acknowledge%28%29
method and attach a debugger to the JVM that's running your TIBCO code, and
you should be able to tell whether the method is being called even if you
don't have access to the generated source code. Another place you could set
a breakpoint is in ActiveMQSession.sendAck():
http://grepcode.com/file/repo1.maven.org/maven2/org.apache.activemq/activemq-all/5.10.0/org/apache/activemq/ActiveMQSession.java#ActiveMQSession.sendAck%28org.apache.activemq.command.MessageAck%29

One other option for investigating this would be to attach a debugger to
the broker and set a breakpoint on TransportConnection.processMessageAck()
-
http://grepcode.com/file/repo1.maven.org/maven2/org.apache.activemq/activemq-all/5.10.0/org/apache/activemq/broker/TransportConnection.java#TransportConnection.processMessageAck%28org.apache.activemq.command.MessageAck%29.
That should let you tell whether the ack is making it to the broker, which
tells us which side of the broker-client divide we should be focusing on.

And although I agree that log lines saying an acknowledgement is sent are
promising, I wouldn't consider that to be confirmation that it's actually
happening, which is why I recommend the debugger for a conclusive result.

You're correct that CLIENT_ACKNOWLEDGE means "acknowledge this message and
all previous ones." It's not something I've used personally and I've seen
very few posts to the mailing list about it, but I don't believe that the
broker would fail to process the ack if it's being sent to the broker. The
only situation I can think of would be one where the producer and consumer
were sharing a single connection and the producer started well before the
consumer and completely filled the broker before the consumer even got
started, and then you had also configured the broker so it couldn't do
per-client producer flow control and it had to block the full TCP
connection that they both share. That scenario is possible, but requires
several not-very-likely things to be true at the same time, so it strikes
me as unlikely.

Also, your suggestion about ActiveMQ waiting because it's busy sounds like
the description of a performance problem, which would be expected to result
in acks eventually (though slowly) being processed, not of a correctness
problem where 100% failure occurs, so if I've correctly understood what you
suggested, then I think it's not likely to be what's happening.

BTW, is producer flow control kicking in when this occurs? And when temp
fills, is it eventually clearing, or does it fill and stay full forever
(even if you stop the producers)?

Tim

On Tue, Jul 18, 2017 at 4:00 AM, akpuvvada <akp4ti...@gmail.com> wrote:

> TestActiveMQ.zip
> <http://activemq.2283324.n4.nabble.com/file/n4728623/TestActiveMQ.zip>
>
> Attached the TIBCO BW Project I am using.
>
> It is not a Java code, TIBCO BW is a GUI (Zero Coding) Integration tool
> that
> stored the configuration in XML and converts the XMLs to Java code at
> Run-time and execute. So I have no idea how this actually works and when
> the
> acknowledge() gets executed.
> However, I can confirm from the logs that Acknowledgement is sent by the
> code.
>
> Active MQ is not accepting or not processing the acknowledgement.
> I read that Client acknowledgement is actually "Acknowledge All Previous".
> Would Active MQ wait to process Acks if it is too busy with other things.
> Producer is producing at a very fast rate and temp space has filled-up fast
> when this is observed. Could that be an issue?
>
>
>
> --
> View this message in context: http://activemq.2283324.n4.
> nabble.com/Active-MQ-Performance-with-CLIENT-Ack-tp4728551p4728623.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>

Reply via email to