code: def reply(self, msg, router=None, **kwargs):
          
          if not isinstance(msg, Message):
              msg = Message.pickled(msg)
          msg.dst_id = self.src_id
          msg.handle = self.reply_to
          vars(msg).update(kwargs)
          if msg.handle:
              (self.router or router).route(msg)
          else:
              LOG.debug('Message.reply(): discarding due to zero handle: %r', msg)
docs: Compose a reply to this message and send it using :attr:`router`, or
          `router` is :attr:`router` is :data:`None`.
  
          :param obj:
              Either a :class:`Message`, or an object to be serialized in order
              to construct a new message.
          :param router:
              Optional router to use if :attr:`router` is :data:`None`.
          :param kwargs:
              Optional keyword parameters overriding message fields in the reply.