Class: NatsWork::Protocol::LanguageRouter
- Inherits:
-
Object
- Object
- NatsWork::Protocol::LanguageRouter
- Defined in:
- lib/natswork/protocol.rb
Overview
Language router for directing jobs to appropriate workers
Class Method Summary collapse
- .parse_queue_language(queue_name) ⇒ Object
- .queue_for_language(base_queue, language = nil) ⇒ Object
- .route_job(job_message, available_workers) ⇒ Object
Class Method Details
.parse_queue_language(queue_name) ⇒ Object
417 418 419 420 421 422 423 424 425 |
# File 'lib/natswork/protocol.rb', line 417 def self.parse_queue_language(queue_name) parts = queue_name.split('.') return [queue_name, nil] if parts.length == 1 language = parts.last base_queue = parts[0..-2].join('.') [base_queue, language] end |
.queue_for_language(base_queue, language = nil) ⇒ Object
411 412 413 414 415 |
# File 'lib/natswork/protocol.rb', line 411 def self.queue_for_language(base_queue, language = nil) return base_queue unless language "#{base_queue}.#{language.downcase}" end |
.route_job(job_message, available_workers) ⇒ Object
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
# File 'lib/natswork/protocol.rb', line 394 def self.route_job(, available_workers) constraints = .dig('metadata', 'worker_constraints') || {} language = constraints['language'] if language # Filter workers by language workers = available_workers.select do |worker| worker[:language] == language end return workers.first if workers.any? end # Fallback to any available worker available_workers.first end |