Class: RubySkynet::StaticServiceRegistry

Inherits:
Object
  • Object
show all
Includes:
SemanticLogger::Loggable
Defined in:
lib/ruby_skynet/static_service_registry.rb

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ StaticServiceRegistry

Create a service registry



19
20
21
22
# 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

Instance Method Details

#deregister_service(name, version, region, hostname, port) ⇒ Object

Deregister the supplied service from the Registry



39
40
41
42
43
44
45
46
47
# 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) ⇒ Object

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



70
71
72
# 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) ⇒ Object

Register the supplied service at this Skynet Server host and Port Returns the UUID for the service that was created



31
32
33
34
35
36
# 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) ⇒ Object

Returns [Array<String>] a list of servers implementing the requested service

Raises:



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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_hObject

Returns the Service Registry as a Hash



25
26
27
# File 'lib/ruby_skynet/static_service_registry.rb', line 25

def to_h
  @services.dup
end