Class: Zizq::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/zizq/configuration.rb

Overview

Global configuration for the Zizq client.

The configuration stores only client-level concerns: server URL, serialization format, and logger. Worker-specific settings (queues, threads, etc.) are passed directly to the Worker.

See: [‘Zizq::configure]`. See: [`Zizq::configuration]`.

Defined Under Namespace

Classes: Identity

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

: () -> void



53
54
55
56
57
58
59
60
# File 'lib/zizq/configuration.rb', line 53

def initialize #: () -> void
  @url = "http://localhost:7890"
  @format = :msgpack
  @logger = Logger.new($stdout, level: Logger::INFO)
  @tls = nil
  @enqueue_middleware = Middleware::Chain.new(Identity.new)
  @dequeue_middleware = Middleware::Chain.new(Zizq::Job)
end

Instance Attribute Details

#dequeue_middlewareObject (readonly)

Middleware chain for dequeue/dispatch. Each middleware receives a ‘Resources::Job` and a chain to continue.



51
52
53
# File 'lib/zizq/configuration.rb', line 51

def dequeue_middleware
  @dequeue_middleware
end

#enqueue_middlewareObject (readonly)

Middleware chain for enqueue. Each middleware receives an ‘EnqueueRequest` and a chain to continue.



47
48
49
# File 'lib/zizq/configuration.rb', line 47

def enqueue_middleware
  @enqueue_middleware
end

#formatObject

Choice of content-type encoding used in communication with the Zizq server.

One of: ‘:json`, `:msgpack` (default)



27
28
29
# File 'lib/zizq/configuration.rb', line 27

def format
  @format
end

#loggerObject

Logger instance to which to write log messages.



30
31
32
# File 'lib/zizq/configuration.rb', line 30

def logger
  @logger
end

#tlsObject

TLS options for connecting to the server over HTTPS.

All values may be PEM-encoded strings or file paths.

{
  ca:          "path/to/ca-cert.pem",       # CA certificate for server verification
  client_cert: "path/to/client-cert.pem",   # Client certificate for mTLS
  client_key:  "path/to/client-key.pem",    # Client private key for mTLS
}

Note: Mutual TLS support requires a Zizq Pro license on the server.



43
44
45
# File 'lib/zizq/configuration.rb', line 43

def tls
  @tls
end

#urlObject

Base URL of the Zizq server (default: “localhost:7890”).



21
22
23
# File 'lib/zizq/configuration.rb', line 21

def url
  @url
end

Instance Method Details

#dispatcherObject

The job dispatcher. This is the terminal of the dequeue middleware chain. Defaults to ‘Zizq::Job` which finds and executes jobs written by mixing in the `Zizq::Job` module.



66
67
68
# File 'lib/zizq/configuration.rb', line 66

def dispatcher #: () -> Zizq::dispatcher
  @dequeue_middleware.terminal
end

#dispatcher=(dispatcher) ⇒ Object

Set the dispatcher to a custom dispatcher implementation.

A dispatcher is any object that responds to ‘#call` with a `Zizq::Resources::Job` instance and performs that job through some application-specific logic.

This is the terminal of the dequeue middleware chain.

Any errors raised by the dispatcher will result in the normal backoff/retry behaviour. Jobs are acknowledged automatically on success.



80
81
82
# File 'lib/zizq/configuration.rb', line 80

def dispatcher=(dispatcher) #: (Zizq::dispatcher) -> void
  @dequeue_middleware.terminal = dispatcher
end

#ssl_contextObject

Build an OpenSSL::SSL::SSLContext from the TLS options, or nil if no TLS options are configured.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/zizq/configuration.rb', line 99

def ssl_context #: () -> OpenSSL::SSL::SSLContext?
  tls = @tls
  return nil unless tls

  ctx = OpenSSL::SSL::SSLContext.new

  if (ca = tls[:ca])
    store = OpenSSL::X509::Store.new
    store.add_cert(load_cert(ca))
    ctx.cert_store = store
    ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
  end

  if (client_cert = tls[:client_cert])
    ctx.cert = load_cert(client_cert)
  end

  if (client_key = tls[:client_key])
    ctx.key = load_key(client_key)
  end

  ctx
end

#validate!Object

Validates that required configuration is present.

Raises:

  • (ArgumentError)


85
86
87
88
89
90
91
92
93
94
# File 'lib/zizq/configuration.rb', line 85

def validate! #: () -> void
  raise ArgumentError, "Zizq.configure: url is required" if url.empty?

  unless %i[msgpack json].include?(format)
    raise ArgumentError, "Zizq.configure: format must be :msgpack or :json, got #{format.inspect}"
  end

  tls = @tls
  validate_tls!(tls) if tls
end