yes, we do recommend using the command bus (as well as the other buses) when dispatching messages to other services. This gives you true “location transparency”, and enables you to move logic in and out of services and have your messages be automatically distributed correctly when running multiple instances of a service.
When messages are serialized, the message type and revision are also attached. By default, these are the fully qualified class name of your message’s palyoad. You can change this, however. In XStream, you can configure package and class aliases. In the JacksonSerializer, you can override the “classForType” and “typeForClass” methods, to implement the mapping from class to message type and vice versa.