Beispiel #1
0
        /// <summary>
        /// Queries the local Consul agent for healthy instances of a given service and selects one such instance.
        /// </summary>
        /// <param name="query">Query used to find services instances.</param>
        /// <exception cref="NoAvailableServiceInstanceException">Thrown when there is no healthy instance available for that service.</exception>
        /// <returns>Returns a service instance.</returns>
        public ServiceInstanceDescriptor GetServiceInstance(ServiceInstanceQuery query, ServiceInstanceSelectionStrategy?strategy = null)
        {
            IServiceInstanceSelectionStrategy selectionStrategy = null;

            if (strategy.HasValue)
            {
                selectionStrategy = InitializeServiceInstanceSelectionStrategy(strategy.Value);
            }
            else
            {
                selectionStrategy = DefaultServiceInstanceSelectionStrategy;
            }
            if (selectionStrategy == null)
            {
                throw new MagellanException("Could not initialize any service instance selection strategy.");
            }

            //Query for available instances
            ICollection <ServiceInstanceDescriptor> availableInstances = GetServiceInstances(query);

            //Select instance
            if (availableInstances.Count > 0)
            {
                return(selectionStrategy.SelectServiceInstance(availableInstances));
            }
            else
            {
                throw new NoAvailableServiceInstanceException();
            }
        }
Beispiel #2
0
 /// <summary>
 /// Queries the local Consul agent for all healthy instances of a given service.
 /// </summary>
 /// <param name="query">Query used to find service instances.</param>
 /// <returns>Returns all available services</returns>
 public ICollection <ServiceInstanceDescriptor> GetServiceInstances(ServiceInstanceQuery query)
 {
     ServiceEntry[] serviceInstances = Consul.Health.Service(query.Service, "", true).Result.Response;
     return(serviceInstances.Select(si => new ServiceInstanceDescriptor(si.Service)).ToList());
 }