code: public <T> T execute(String serviceId, LoadBalancerRequest<T> request, Object hint)
  			throws IOException {
  		ILoadBalancer loadBalancer = getLoadBalancer(serviceId);
  		Server server = getServer(loadBalancer, hint);
  		if (server == null) {
  			throw new IllegalStateException("No instances available for " + serviceId);
  		}
  		RibbonServer ribbonServer = new RibbonServer(serviceId, server,
  				isSecure(server, serviceId),
  				serverIntrospector(serviceId).getMetadata(server));
  
  		return execute(serviceId, ribbonServer, request);
  	}
docs: New: Execute a request by selecting server using a 'key'. The hint will have to be
  the last parameter to not mess with the `execute(serviceId, ServiceInstance,
  request)` method. This somewhat breaks the fluent coding style when using a lambda
  to define the LoadBalancerRequest.
  @param <T> returned request execution result type
  @param serviceId id of the service to execute the request to
  @param request to be executed
  @param hint used to choose appropriate {@link Server} instance
  @return request execution result
  @throws IOException executing the request may result in an {@link IOException}