It's not 100% clear if this start() command is blocking as it creates a new command dispatcher from an existing MessageDispatcher instance started in another service, CommandDispatcherFactoryService, and that service is started asynchronously. Likewise, the stop()  method just removes an entry for the new command dispatcher from a map in the CommandDispatcherFactoryService. But I have started/stopped this service asynchronously just in case by using Paul's AsynchronousService class.