Class: PGMQ::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/pgmq/message.rb

Overview

Represents a message read from a PGMQ queue

Returns raw values from PostgreSQL without transformation. Higher-level frameworks should handle parsing, deserialization, etc.

Examples:

Reading a message (raw values)

msg = client.read("my_queue", vt: 30)
puts msg.msg_id         # => "123" (String from PG)
puts msg.read_ct        # => "1" (String from PG)
puts msg.enqueued_at    # => "2025-01-15 10:30:00+00" (String from PG)
puts msg.last_read_at   # => "2025-01-15 10:31:00+00" (String from PG, nil if never read)
puts msg.vt             # => "2025-01-15 10:30:30+00" (String from PG)
puts msg.message        # => "{\"order_id\":456}" (Raw JSONB string)
puts msg.headers        # => "{\"trace_id\":\"abc123\"}" (Raw JSONB string, optional)
puts msg.queue_name     # => "my_queue" (only present for multi-queue operations)

Class Method Summary collapse

Class Method Details

.new(row) ⇒ Message

Creates a new Message from a database row

Parameters:

  • row (Hash)

    database row from PG result

Returns:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/pgmq/message.rb', line 26

def new(row, **)
  # Return raw values as-is from PostgreSQL
  # No parsing, no deserialization, no transformation
  # The pg gem returns JSONB as String by default
  super(
    msg_id: row["msg_id"],
    read_ct: row["read_ct"],
    enqueued_at: row["enqueued_at"],
    last_read_at: row["last_read_at"], # nil if message has never been read
    vt: row["vt"],
    message: row["message"],
    headers: row["headers"], # JSONB column for metadata (optional)
    queue_name: row["queue_name"] # nil for single-queue operations
  )
end