Sha256: 416b74ee8d456352f7463dc8e1177fe1032a2f18c15ba6057cca42a6d32d8c9f
Contents?: true
Size: 1.28 KB
Versions: 7
Compression:
Stored size: 1.28 KB
Contents
require 'concurrent' require "dryad/core" require "dryad/consul" require "dryad/cluster/railtie" if defined?(Rails) require "dryad/cluster/version" require "dryad/cluster/round_robin" module Dryad module Cluster class Error < StandardError; end class NoServicesError < Error; end class << self attr_accessor :configuration CLUSTERS = {} def round_robin(schema, service_name) groups = ['_global_', @configuration.group] full_name = Dryad::Core::Service.full_name(schema, service_name) if CLUSTERS[full_name].nil? CLUSTERS[full_name] = Dryad::Cluster::RoundRobin.new CLUSTERS[full_name].set_services(sorted_instances(service_name, schema, groups)) end begin retries ||= 0 CLUSTERS[full_name].service rescue Dryad::Cluster::NoServicesError CLUSTERS[full_name].set_services(sorted_instances(service_name, schema, groups)) retry if (retries += 1) < 2 end end def sorted_instances(service_name, schema, groups) registry = Object.const_get(@configuration.registry) sis = registry.service_instances(service_name, schema, groups) sis.sort {|a, b| "#{a.address}:#{a.port}" <=> "#{b.address}:#{b.port}"} end end end end
Version data entries
7 entries across 7 versions & 2 rubygems