code: def service_replicas_outbox(self, limit: int = None) -> int:
          
          # TODO: rewrite this using Router
  
          num_processed = 0
          for message in self.replicas.get_output(limit):
              num_processed += 1
              if isinstance(message, (PrePrepare, Prepare, Commit, Checkpoint)):
                  self.send(message)
              elif isinstance(message, Ordered):
                  self.try_processing_ordered(message)
              elif isinstance(message, tuple) and isinstance(message[1], Reject):
                  with self.metrics.measure_time(MetricsName.NODE_SEND_REJECT_TIME):
                      digest, reject = message
                      result_reject = Reject(
                          reject.identifier,
                          reject.reqId,
                          self.reasonForClientFromException(
                              reject.reason))
                      # TODO: What the case when reqKey will be not in requestSender dict
                      if digest in self.requestSender:
                          self.transmitToClient(result_reject, self.requestSender[digest])
                          self.doneProcessingReq(digest)
              elif isinstance(message, Exception):
                  self.processEscalatedException(message)
              else:
                  # TODO: should not this raise exception?
                  logger.error("Received msg {} and don't "
                               "know how to handle it".format(message))
          return num_processed
docs: Process `limit` number of replica messages