Module: Workling

Defined in:
lib/workling/base.rb,
lib/workling.rb,
lib/workling/remote.rb,
lib/workling/discovery.rb,
lib/workling/clients/base.rb,
lib/workling/routing/base.rb,
lib/workling/invokers/base.rb,
lib/workling/return/store/base.rb,
lib/workling/clients/not_client.rb,
lib/workling/clients/sqs_client.rb,
lib/workling/clients/amqp_client.rb,
lib/workling/clients/broker_base.rb,
lib/workling/clients/xmpp_client.rb,
lib/workling/clients/spawn_client.rb,
lib/workling/clients/rude_q_client.rb,
lib/workling/clients/thread_client.rb,
lib/workling/invokers/basic_poller.rb,
lib/workling/return/store/iterator.rb,
lib/workling/routing/static_routing.rb,
lib/workling/invokers/threaded_poller.rb,
lib/workling/clients/amqp_bunny_client.rb,
lib/workling/clients/not_remote_client.rb,
lib/workling/invokers/looped_subscriber.rb,
lib/workling/clients/memory_queue_client.rb,
lib/workling/invokers/thread_pool_poller.rb,
lib/workling/clients/amqp_exchange_client.rb,
lib/workling/clients/backgroundjob_client.rb,
lib/workling/clients/memcache_queue_client.rb,
lib/workling/invokers/amqp_single_subscriber.rb,
lib/workling/invokers/eventmachine_subscriber.rb,
lib/workling/return/store/memory_return_store.rb,
lib/workling/routing/class_and_method_routing.rb,
lib/workling/return/store/starling_return_store.rb

Overview

Recommended Return Store if you are using the Starling Runner. This

Simply sets and gets values against queues. 'key' is the name of the respective Queue.

Defined Under Namespace

Modules: Clients, Invokers, Remote, Return, Routing Classes: Base, ConfigurationError, Discovery, QueueserverNotFoundError, WorklingConnectionError, WorklingError, WorklingNotFoundError

Constant Summary collapse

VERSION =
"0.4.9"
@@load_path =
[ File.expand_path(path('app', 'workers')) ]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clientsObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/workling.rb', line 76

def self.clients
  {
    'amqp' => Workling::Clients::AmqpClient,
    'amqp_bunny' => Workling::Clients::AmqpBunnyClient,
    'amqp_exchange' => Workling::Clients::AmqpExchangeClient,
    'memcache' => Workling::Clients::MemcacheQueueClient,
    'starling' => Workling::Clients::MemcacheQueueClient,
    'memory_queue' => Workling::Clients::MemoryQueueClient,
    'sqs' => Workling::Clients::SqsClient,
    'xmpp' => Workling::Clients::XmppClient,
    'backgroundjob' => Workling::Clients::BackgroundjobClient,
    'not_remote' => Workling::Clients::NotRemoteClient,
    'not' => Workling::Clients::NotClient,
    'spawn' => Workling::Clients::SpawnClient,
    'thread' => Workling::Clients::ThreadClient,
    'rudeq' => Workling::Clients::RudeQClient
  }
end

.configObject



162
163
164
165
166
167
168
169
170
# File 'lib/workling.rb', line 162

def self.config
  return @@config if defined?(@@config) && @@config

  return nil unless File.exists?(config_path)

  @@config ||= YAML.load_file(config_path)[env || 'development'].symbolize_keys
  @@config[:memcache_options].symbolize_keys! if @@config[:memcache_options]
  @@config
end

.config_pathObject



173
174
175
176
# File 'lib/workling.rb', line 173

def self.config_path
  return @@config_path if defined?(@@config_path) && @@config_path
  @@config_path = File.join(RAILS_ROOT, 'config', 'workling.yml')
end

.envObject



46
47
48
49
50
51
52
# File 'lib/workling.rb', line 46

def self.env
  @env ||= if defined?(RAILS_ENV)
             RAILS_ENV.to_s
           elsif defined?(RACK_ENV)
             RACK_ENV.to_s
           end
end

.find(clazz, method = nil) ⇒ Object

gets the worker instance, given a class. the optional method argument will cause an exception to be raised if the worker instance does not respoind to said method.



143
144
145
146
147
148
149
150
151
# File 'lib/workling.rb', line 143

def self.find(clazz, method = nil)
  begin
    inst = clazz.to_s.camelize.constantize.new 
  rescue NameError
    raise_not_found(clazz, method)
  end
  raise_not_found(clazz, method) if method && !inst.respond_to?(method)
  inst
end

.path(*args) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/workling.rb', line 38

def self.path(*args)
  if defined?(RAILS_ROOT)
    File.join(RAILS_ROOT, *args)
  else
    File.join(Dir.pwd, *args)
  end
end

.raise_exceptions?Boolean

Returns:

  • (Boolean)


188
189
190
# File 'lib/workling.rb', line 188

def self.raise_exceptions?
  @@raise_exceptions
end

.returnObject

returns Workling::Return::Store.instance.



154
155
156
# File 'lib/workling.rb', line 154

def self.return
  Workling::Return::Store.instance
end

.select_and_build_clientObject

this will build the client to use for job dispatching and retrieval The look up does the following:

1. if Workling::Remote.client is set explicitly then that client is used
2. if workling.yml (or whatever file is used) contains a client section then that is used
3. otherwise the default client is built using the Workling.select_and_build_default_client method


108
109
110
# File 'lib/workling.rb', line 108

def self.select_and_build_client
  select_client.new
end

.select_and_build_invokerObject

this will build the invoker which will run the daemon



126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/workling.rb', line 126

def self.select_and_build_invoker
  invoker_class = {
    'basic_poller' => Workling::Invokers::BasicPoller,
    'thread_pool_poller' => Workling::Invokers::ThreadPoolPoller,
    'threaded_poller' => Workling::Invokers::ThreadedPoller,

    'eventmachine_subscriber' => Workling::Invokers::EventmachineSubscriber,
    'looped_subscriber' => Workling::Invokers::LoopedSubscriber,
    'amqp_single_subscriber' => Workling::Invokers::AmqpSingleSubscriber,
  }[Workling.config[:invoker]] || Workling::Invokers::BasicPoller
  invoker_class.new(select_and_build_routing, select_client)
end

.select_and_build_routingObject

this will select the routing class



115
116
117
118
119
120
121
# File 'lib/workling.rb', line 115

def self.select_and_build_routing
  routing_class = {
    'class_and_method' => Workling::Routing::ClassAndMethodRouting,
    'static' => Workling::Routing::StaticRouting
  }[Workling.config[:routing]] || Workling::Routing::ClassAndMethodRouting
  routing_class.new
end

.select_clientObject



95
96
97
98
99
# File 'lib/workling.rb', line 95

def self.select_client
  client_class = clients[Workling.config[:client]] || select_default_client
  client_class.load
  client_class
end

.select_default_clientObject

determine the client to use if nothing is specifically set. workling will try to detect starling, spawn, or bj, in that order. if none of these are found, notremoterunner will be used.



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/workling.rb', line 64

def self.select_default_client
  if env == "test"
    Workling::Clients::NotRemoteClient
  elsif Workling::Clients::SpawnClient.installed?
    Workling::Clients::SpawnClient
  elsif Workling::Clients::BackgroundjobClient.installed?
    Workling::Clients::BackgroundjobClient
  else
    Workling::Clients::NotRemoteClient
  end
end

Instance Method Details

#raise_exceptionsObject



183
184
185
186
# File 'lib/workling.rb', line 183

def raise_exceptions
  return @@raise_exceptions if defined?(@@raise_exceptions)
  @@raise_exceptions = (RAILS_ENV == "test" || RAILS_ENV == "development")
end