TODO: Because a producer of a message doesn't generally know when a message is consumed, it's difficult for the caller to do a proper instance caching.