code: public static <T> NonBlockingClient create(String service, ClientOptions options,
              NonBlockingClientListener<T> listener, T context)
      throws IllegalArgumentException {
          return new NonBlockingClientImpl(service, options, listener, context);
      }
docs: Creates a new instance of the <code>NonBlockingClient</code> in starting state.
  @param service a URI for the service to connect to, for example: <code>amqp://example.org:5672</code>.
  This URI can start with either <code>amqp://</code> or <code>amqps://</code> (for SSL/TLS based
  connections).  User names and passwords may be embedded into the URL - for example:
  <code>amqp://user:pass@example.com</code>.  If a value of <code>null</code> is specified then
  the client will attempt to locate a suitable service based on its environment.  Currently it
  is capable of locating services in this way when run in the IBM Bluemix environment.
  @param options a set of options that determine the behaviour of the client.
  @param listener a listener that is notified of major life-cycle events for the client.
  @param context a context object that is passed into the listener.  This can be used within the listener code to
  identify the specific instance of the create method relating to the listener invocation.
  @param <T> the type of the context, used to propagate an arbitrary object between method calls on an
  instance of this object, and the various listeners that are used to provide notification
  of client related events.
  @return a new instance of <code>NonBlockingClient</code>
  @throws IllegalArgumentException thrown if one or more of the <code>options</code> is not valid.