Extract the notion of a Scheduler from Dispatcher, that controls the decision-making about when messages are sent. The user can substitute their own implementation of the Scheduler API and take control of this process without touching anything to do with the transport or the message protocol.