if (log.isTraceEnabled()) log.trace(this.id + " received " + routable);
   public Delivery handle(DeliveryObserver observer, Routable routable)   {      // deliver the message on a different thread than the core thread that brought it here      if (log.isTraceEnabled()) log.trace(this.id + " received " + routable);      Delivery delivery = null;      try      {         Message message = routable.getMessage();         if (log.isTraceEnabled()) { log.trace("dereferenced message: " + message); }         boolean accept = this.accept(message);         if (!accept)         {            if (log.isTraceEnabled()) { log.trace("consumer DOES NOT accept the message"); }            return null;         }         delivery = new SimpleDelivery(observer, routable);         deliveries.put(routable.getMessageID(), delivery);         if (log.isTraceEnabled()) { log.trace("queueing the message " + message + " for delivery"); }         threadPool.execute(new DeliveryRunnable(callbackHandler, message, log));                        }      catch(InterruptedException e)      {         log.warn("Interrupted asynchronous delivery", e);      }      return delivery;   }