'Don\'t use this class directly, use on of its implementations
:param message_id: A message id to identify the message
:param timestamp: A timestamp when the message was created
:type message_id: MessageId
:type timestamp: Timestamp'

def __init__(self, message_id, timestamp):

    super(Message, self).__init__()
    assert isinstance(message_id, MessageId), type(message_id)
    assert isinstance(timestamp, Timestamp), type(timestamp)
    self._message_id = message_id
    self._timestamp = timestamp
