There's functions that use callbacks, some that return msgs (and therefore dont have keys, which could be used to optimize potentially expensive msg comparisons), there's onWithOptions, etc.
Let's try and have a consistent interface and equivalent set of functions for each way to call these.