Example #1
0
        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);
        }
Example #2
0
 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);
 }
Example #3
0
        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);
        }
Example #4
0
 /// <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),
     });
 }
Example #5
0
 /// <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);
        }
Example #7
0
 /// <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),
     });
 }
Example #8
0
 /// <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),
     });
 }