class RubySkynet::StaticServiceRegistry
Public Class Methods
new(params = {})
click to toggle source
Create a service registry
# File lib/ruby_skynet/static_service_registry.rb, line 19 def initialize(params = {}) @services = params[:registry] raise "Missing :registry in config that must list the availables services" unless @services end
Public Instance Methods
deregister_service(name, version, region, hostname, port)
click to toggle source
Deregister the supplied service from the Registry
# File lib/ruby_skynet/static_service_registry.rb, line 39 def deregister_service(name, version, region, hostname, port) server = "#{hostname}:#{port}" key = "#{name}/#{version}/#{region}" if servers = @services[key] servers.delete_if {|s| s == server} @services.delete(key) if servers.count == 0 end key end
on_server_removed(server, &block)
click to toggle source
Invokes registered callbacks when a specific server is shutdown or terminates Not when a server de-registers itself The callback will only be called once and will need to be re-registered after being called if future callbacks are required for that server
# File lib/ruby_skynet/static_service_registry.rb, line 70 def on_server_removed(server, &block) #nop end
register_service(name, version, region, hostname, port)
click to toggle source
Register the supplied service at this Skynet Server
host and Port Returns the UUID for the service that was created
# File lib/ruby_skynet/static_service_registry.rb, line 31 def register_service(name, version, region, hostname, port) server = "#{hostname}:#{port}" key = "#{name}/#{version}/#{region}" (@services[key] ||= []) << server key end
servers_for(name, version='*', region=RubySkynet.region)
click to toggle source
Returns [Array<String>] a list of servers implementing the requested service
# File lib/ruby_skynet/static_service_registry.rb, line 50 def servers_for(name, version='*', region=RubySkynet.region) if version == '*' # Find the highest version for the named service in this region version = -1 @services.keys.each do |key| if match = key.match(/#{name}\/(\d+)\/#{region}/) ver = match[1].to_i version = ver if ver > version end end end servers = @services["#{name}/#{version}/#{region}"] raise ServiceUnavailable.new("No servers available for service: #{name} with version: #{version} in region: #{region}") unless servers servers end
to_h()
click to toggle source
Returns the Service
Registry as a Hash
# File lib/ruby_skynet/static_service_registry.rb, line 25 def to_h @services.dup end