@Override
    public void run() {
      plog.info(this.getServiceName() + " service started");

      final ChannelEventListener listener = NettyRemotingAbstract.this.getChannelEventListener();

      while (!this.isStoped()) {
        try {
          NettyEvent event = this.eventQueue.poll(3000, TimeUnit.MILLISECONDS);
          if (event != null && listener != null) {
            switch (event.getType()) {
              case IDLE:
                listener.onChannelIdle(event.getRemoteAddr(), event.getChannel());
                break;
              case CLOSE:
                listener.onChannelClose(event.getRemoteAddr(), event.getChannel());
                break;
              case CONNECT:
                listener.onChannelConnect(event.getRemoteAddr(), event.getChannel());
                break;
              case EXCEPTION:
                listener.onChannelException(event.getRemoteAddr(), event.getChannel());
                break;
              default:
                break;
            }
          }
        } catch (Exception e) {
          plog.warn(this.getServiceName() + " service has exception. ", e);
        }
      }

      plog.info(this.getServiceName() + " service end");
    }
 public void putNettyEvent(final NettyEvent event) {
   if (this.eventQueue.size() <= MaxSize) {
     this.eventQueue.add(event);
   } else {
     plog.warn(
         "event queue size[{}] enough, so drop this event {}",
         this.eventQueue.size(),
         event.toString());
   }
 }