code: NatsSubscription createSubscription(String subject, String queueName, NatsDispatcher dispatcher) {
          if (isClosed()) {
              throw new IllegalStateException("Connection is Closed");
          } else if (isDraining() && (dispatcher == null || dispatcher != this.inboxDispatcher.get())) {
              throw new IllegalStateException("Connection is Draining");
          }
  
          NatsSubscription sub = null;
          long sidL = nextSid.getAndIncrement();
          String sid = String.valueOf(sidL);
  
          sub = new NatsSubscription(sid, subject, queueName, this, dispatcher);
          subscribers.put(sid, sub);
  
          sendSubscriptionMessage(sid, subject, queueName, false);
          return sub;
      }
docs: Assumes the null/empty checks were handled elsewhere