James,

There are two independent concepts here:
1. what limit gets evaluated to determine whether the producer should stop
sending messages
2. which producers should be stopped in response

Without ProducerWindowSize, the limits are based on the destination and the
entire store (plus other limits such as memoryUsage), and the options for
who to stop are to stop only the producer that is sending to a PFCed
destination (but not other producers on the same connection unless they
also publish to a PFCed destination) or all producers on the connection
even if they are publishing to destinations that are not PFCed.  Without
ProducerWindowSize, the terms "per-producer" and "whole-connection"
unambiguously refer to #2, the action to take in response.

ProducerWindowSize adds a per-producer option to #1, the limits to
evaluate, and I should have disambiguated between the two.  To be clear,
when I said "per-producer PFC" in this thread, I was referring only to #2,
and I believe the same is true of the wiki (though I'm going from memory
here so I could be wrong).

As far as actually configuring ProducerWindowSize, it needs to be set small
enough that your producer hits the window size by the time the destination
gets full, otherwise it'll have no effect.  For a single producer on a
given destination, just set ProducerWindowSize to the destination limit.
For multiple producers on a destination, a safe value is the destination
limit / number of producers.  You can increase it if you have guarantees
that let you say that your producers won't all hit their limits at once (no
matter how long consumers are down and no matter what else happens on the
broker), but you'd better be very sure about those guarantees or you won't
be sure you'll hit the ProducerWindowSize before whole-connection PFC kicks
in.

I've got one question about this most recent email, though.  Why is it bad
to see that the "Producers will be throttled" message was immediately
followed by "Producer stopped"?  Stopping the producer immediately is the
point of PFC.

Also, you said "Eventhough the Producer was not stopped immediately in my
case, I found that the Producer was stopped eventually after testing it for
a prolonged period of time (> 8 hours)."  I suspect that this was the point
where you had filled both the broker's TCP receive buffer and your
producer's TCP send buffer, at which point your TCP send() calls will hang.

Tim
On Aug 31, 2015 10:04 PM, "jamesTheCruncher" <ja...@mcruncher.com> wrote:

> Hi Tim,
>
> Thanks for your continued interest in this subject.
> Yes, as per my testing, I didn't configure any ProducerWindowSize but found
> that the PFC was kicking in based on the per-destination limit I
> configured.
> I don't think it was the whole-connection PFC because I had set fairly
> larger limits for system usage.
> From the logs, I found that the parent usage didn't hit even 1 percentage.
>
>
> But I noticed that the "Producers will be throttled" message was
> immediately
> followed by "Producer stopped" in the logs, which makes me to think that
> one
> should configure a ProducerWindowSize value that is less than the
> per-destination limit set.
>
> Eventhough the Producer was not stopped immediately in my case, I found
> that
> the Producer was stopped eventually after testing it for a prolonged period
> of time (> 8 hours).
>
> I will configure ProducerWindowSize and continue my testing. But it will be
> great if someone can tell whether my "guessing" is correct and whether I am
> proceeding in the right direction.
>
>
>
> --
> View this message in context:
> http://activemq.2283324.n4.nabble.com/What-is-the-correct-way-to-throttle-ActiveMQ-producers-who-send-persistent-messages-in-batches-to-a--tp4701204p4701571.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>

Reply via email to