Class: NatsWork::Protocol::LanguageRouter

Inherits:
Object
  • Object
show all
Defined in:
lib/natswork/protocol.rb

Overview

Language router for directing jobs to appropriate workers

Class Method Summary collapse

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(job_message, available_workers)
  constraints = job_message.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