Hi Luke,
Thanks for your questions and observations!
I'm jumping onto your last remark, on the loading of messages from disk. If a queue gets initialized from disk, and changes state from offline queue to online queue, the behaviour you describe is obviously highly contraintuitive. That said, `max_online_messages` is to protect RAM, `max_offline_messages` to protect disk (or disk and RAM, I should say, as there are always RAM based indexes). So if the first is configured to a lower value than the second, we'll immediately see message drops. The idea was to give you both those config options independent of each other.
I guess we should do some adaptive loading and delivery of messages loaded from disk. Adapted to the online consumer speed, that is. Possibly have an iterator on LevelDB that reads in batches that are always a little smaller than the `max_online_messages` window.
I was under the impression we already do some batching but I'll have to check in the source code.
-André