Content entities are a version of the EntityType plugin. When you define a content entity type, the annotation block begins with @ContentEntityType. This declaration and the properties in it represent the definition to initiate an instance of the \Drupal\Core\Entity\ContentEntityType, class just like all other plugin annotations. The ContentEntityType plugin class implements a constructor to provide default storage and view_builder handlers, forcing us to implement the list_builder and form handler arrays.
The plugin manager for entity types lives under the entity_type.manager service name and is provided through \Drupal\Core\Entity\EntityTypeManager by default. However, while the annotation defines the plugin information, our Message class that extends ContentEntityBase provides a means to manipulate the data it represents.