private async Task <object> Exec(string serviceName, string route, object[] args, Dictionary <string, string> meta, Type returnValueType) { ServiceNodeInfo node; if (UraganoSettings.IsDevelopment) { node = new ServiceNodeInfo { Address = UraganoSettings.ServerSettings.IP.ToString(), Port = UraganoSettings.ServerSettings.Port } } ; else { node = await LoadBalancing.GetNextNode(serviceName); } var client = await ClientFactory.CreateClientAsync(node.Address, node.Port); var result = await client.SendAsync(new InvokeMessage(route, args, meta)); if (result.Status != RemotingStatus.Ok) { throw new RemoteInvokeException(route, result.Result?.ToString(), result.Status); } if (returnValueType == null) { return(null); } return(result.Result); }
public void SetUpTest() { loadBalancer = new LoadBalancing(); LoadBalancing.Instance = Substitute.For <ILoadBalancerContract>(); LoadBalancing.Instance.Alive("").Returns(false); LoadBalancing.Instance.RequestForTurnOnOff(true, "w1").Returns(true); LoadBalancing.Instance.RequestForTurnOnOff(false, "w1").Returns(true); LoadBalancing.Instance.RequestForTurnOnOff(true, "w2").Returns(false); }
public string GetConnectionString(string connectionName, bool readOnly = false) { var connection = _connections.GetOrAdd(connectionName, name => { Configure(name); return(Bind(name)); }); return(readOnly ? LoadBalancing.NextConnectionString(connection.Slaves) : connection.Master); }
/// <inheritdoc/> Backend IDeepCloneable <Backend> .DeepClone() { return(new Backend { CircuitBreakerOptions = CircuitBreakerOptions?.DeepClone(), QuotaOptions = QuotaOptions?.DeepClone(), PartitioningOptions = PartitioningOptions?.DeepClone(), LoadBalancing = LoadBalancing?.DeepClone(), HealthCheckOptions = HealthCheckOptions?.DeepClone(), Endpoints = Endpoints.DeepClone(StringComparer.Ordinal), Metadata = Metadata?.DeepClone(StringComparer.Ordinal), }); }
/// <inheritdoc/> Cluster IDeepCloneable <Cluster> .DeepClone() { return(new Cluster { Id = Id, LoadBalancing = LoadBalancing?.DeepClone(), SessionAffinity = SessionAffinity?.DeepClone(), HealthCheck = HealthCheck?.DeepClone(), HttpClient = HttpClient?.DeepClone(), HttpRequest = HttpRequest?.DeepClone(), Destinations = Destinations.DeepClone(StringComparer.OrdinalIgnoreCase), Metadata = Metadata?.DeepClone(StringComparer.OrdinalIgnoreCase), }); }
private async Task <IServiceResult> Exec(string serviceName, string route, object[] args, Dictionary <string, string> meta) { var node = await LoadBalancing.GetNextNode(serviceName, route, args, meta); var client = await ClientFactory.CreateClientAsync(serviceName, node); var result = await client.SendAsync(new InvokeMessage(route, args, meta)); if (result.Status != RemotingStatus.Ok) { throw new RemoteInvokeException(route, result.Result?.ToString(), result.Status); } return(result); }
/// <inheritdoc/> Cluster IDeepCloneable <Cluster> .DeepClone() { return(new Cluster { Id = Id, CircuitBreakerOptions = CircuitBreakerOptions?.DeepClone(), QuotaOptions = QuotaOptions?.DeepClone(), PartitioningOptions = PartitioningOptions?.DeepClone(), LoadBalancing = LoadBalancing?.DeepClone(), SessionAffinity = SessionAffinity?.DeepClone(), HealthCheckOptions = HealthCheckOptions?.DeepClone(), Destinations = Destinations.DeepClone(StringComparer.Ordinal), Metadata = Metadata?.DeepClone(StringComparer.Ordinal), }); }
/// <inheritdoc/> Cluster IDeepCloneable <Cluster> .DeepClone() { return(new Cluster { Id = Id, CircuitBreaker = CircuitBreaker?.DeepClone(), Quota = Quota?.DeepClone(), Partitioning = Partitioning?.DeepClone(), LoadBalancing = LoadBalancing?.DeepClone(), SessionAffinity = SessionAffinity?.DeepClone(), HealthCheck = HealthCheck?.DeepClone(), HttpClient = HttpClient?.DeepClone(), Destinations = Destinations.DeepClone(StringComparer.OrdinalIgnoreCase), Metadata = Metadata?.DeepClone(StringComparer.OrdinalIgnoreCase), }); }