Iterator.next() by some filter.MessageProvider implementations.MessageProvider.MessageProvider.MessageProvider with a try/catch
such that they always return correctly without throwing an
Exception.MessageProvider such that after a specified
number of calls to next() that results in 0 messages being returned,
hasNext() flips over to return false.MessageProvider such that after a specified
number of calls to next() that results in 0 messages being returned, or
the maximum limit of messages is reached, hasNext() flips over to
return false.MessageProviders.newUntilNextEmptyOrMaximumMessageProvider(MessageProvider, long, int) but instead of detecting
numerous "empties" considers numerous "slows", where that is defined to be calls to next that produce less
than the specified batch threshold.MessageHandlerMessageProviderMessageQueueReaderIterator.next() before bubbling onward.