In NServiceBus we have different message type like IMessage, ICommand, IEvent to communicate between system. 
What is the difference between IMessage, ICommand,IEvent? 
What business scenario we should use these types?

Thanks