/// <summary> /// Randomly select from the available endpoints /// </summary> /// <param name="endpoints"></param> /// <returns></returns> public ServiceEndpoint GetNegotiateEndpoint(IEnumerable <ServiceEndpoint> endpoints) { // get primary endpoints snapshot var availbaleEndpoints = GetNegotiateEndpoints(endpoints); return(availbaleEndpoints[StaticRandom.Next(availbaleEndpoints.Length)]); }
/// <summary> /// Round robin from the available endpoints /// </summary> /// <param name="primaryEndpoints"></param> /// <returns></returns> public ServiceEndpoint GetNegotiateEndpoint(IEnumerable <ServiceEndpoint> primaryEndpoints) { // get primary endpoints snapshot var endpoints = primaryEndpoints.ToArray(); return(endpoints[StaticRandom.Next(endpoints.Length)]); }
public async Task WriteAsync(ServiceMessage serviceMessage) { if (_serviceConnections.Count == 0) { throw new InvalidOperationException("Azure SignalR Service is not connected yet, please try again later."); } var index = StaticRandom.Next(_serviceConnections.Count); await _serviceConnections[index].WriteAsync(serviceMessage); }
private Task WriteToRandomAvailableConnection(ServiceMessage serviceMessage) { return(WriteWithRetry(serviceMessage, StaticRandom.Next(-FixedConnectionCount, FixedConnectionCount), FixedConnectionCount)); }
public async Task WriteAsync(ServiceMessage serviceMessage) { var index = StaticRandom.Next(_serviceConnections.Count); await _serviceConnections[index].WriteAsync(serviceMessage); }