Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

API Reference

Fila exposes two service groups on the same port (default 5555) via FIBP (Fila Binary Protocol). Protobuf message definitions are in proto/fila/v1/.

Hot-path service (fila.v1.FilaService)

Used by producers and consumers for message operations.

Enqueue

Enqueue one or more messages. Single-message enqueue is a batch of one.

rpc Enqueue(EnqueueRequest) returns (EnqueueResponse)

Request (EnqueueRequest):

FieldTypeDescription
messagesrepeated EnqueueMessageOne or more messages to enqueue

EnqueueMessage:

FieldTypeDescription
queuestringQueue name
headersmap<string, string>Arbitrary key-value headers (accessible in Lua hooks)
payloadbytesMessage body

Response (EnqueueResponse):

FieldTypeDescription
resultsrepeated EnqueueResultOne result per input message (same order)

EnqueueResult:

FieldTypeDescription
message_idstringUUID assigned (on success)
errorEnqueueErrorError details (on failure)

Only one of message_id or error is set (protobuf oneof).

EnqueueErrorCode:

CodeDescription
ENQUEUE_ERROR_CODE_QUEUE_NOT_FOUNDQueue does not exist
ENQUEUE_ERROR_CODE_STORAGEStorage layer error
ENQUEUE_ERROR_CODE_LUALua hook rejected the message
ENQUEUE_ERROR_CODE_PERMISSION_DENIEDCaller lacks permission

StreamEnqueue

Bidirectional streaming enqueue with sequence tracking. The client sends batches of messages on the request stream and receives per-batch results on the response stream. Sequence numbers allow the client to correlate responses with requests.

rpc StreamEnqueue(stream StreamEnqueueRequest) returns (stream StreamEnqueueResponse)

Request (stream, StreamEnqueueRequest):

FieldTypeDescription
messagesrepeated EnqueueMessageMessages to enqueue in this batch
sequence_numberuint64Client-assigned sequence number for correlation

Response (stream, StreamEnqueueResponse):

FieldTypeDescription
sequence_numberuint64Echoed sequence number from the request
resultsrepeated EnqueueResultOne result per input message

Consume

Open a server-streaming connection to receive messages. The broker delivers messages according to the DRR scheduler, respecting fairness groups and throttle limits.

rpc Consume(ConsumeRequest) returns (stream ConsumeResponse)

Request:

FieldTypeDescription
queuestringQueue name to consume from

Response (stream, ConsumeResponse):

FieldTypeDescription
messagesrepeated MessageOne or more delivered messages (see Message below)

The stream stays open until the client disconnects. Messages are delivered as they become available — the stream blocks when no messages are ready.

Errors:

Error StatusCondition
NOT_FOUNDQueue does not exist

Ack

Acknowledge one or more messages. Removes acknowledged messages from the broker.

rpc Ack(AckRequest) returns (AckResponse)

Request (AckRequest):

FieldTypeDescription
messagesrepeated AckMessageOne or more messages to acknowledge

AckMessage:

FieldTypeDescription
queuestringQueue name
message_idstringID of the message to acknowledge

Response (AckResponse):

FieldTypeDescription
resultsrepeated AckResultOne result per input message

AckResult:

FieldTypeDescription
successAckSuccessEmpty message (on success)
errorAckErrorError details (on failure)

Only one of success or error is set (protobuf oneof).

AckErrorCode:

CodeDescription
ACK_ERROR_CODE_MESSAGE_NOT_FOUNDMessage does not exist or is not leased
ACK_ERROR_CODE_STORAGEStorage layer error
ACK_ERROR_CODE_PERMISSION_DENIEDCaller lacks permission

Nack

Reject one or more messages. Triggers the on_failure Lua hook (if configured) to decide retry vs. dead-letter.

rpc Nack(NackRequest) returns (NackResponse)

Request (NackRequest):

FieldTypeDescription
messagesrepeated NackMessageOne or more messages to reject

NackMessage:

FieldTypeDescription
queuestringQueue name
message_idstringID of the message to reject
errorstringError description (passed to on_failure hook as msg.error)

Response (NackResponse):

FieldTypeDescription
resultsrepeated NackResultOne result per input message

NackResult:

FieldTypeDescription
successNackSuccessEmpty message (on success)
errorNackErrorError details (on failure)

Only one of success or error is set (protobuf oneof).

NackErrorCode:

CodeDescription
NACK_ERROR_CODE_MESSAGE_NOT_FOUNDMessage does not exist or is not leased
NACK_ERROR_CODE_STORAGEStorage layer error
NACK_ERROR_CODE_PERMISSION_DENIEDCaller lacks permission

Admin service (fila.v1.FilaAdmin)

Used by operators and the fila CLI for queue management, configuration, and diagnostics.

CreateQueue

Create a new queue with optional Lua hooks and visibility timeout.

rpc CreateQueue(CreateQueueRequest) returns (CreateQueueResponse)

Request:

FieldTypeDescription
namestringQueue name
configQueueConfigOptional configuration (see below)

QueueConfig:

FieldTypeDefaultDescription
on_enqueue_scriptstring(none)Lua script run on every enqueue
on_failure_scriptstring(none)Lua script run on every nack
visibility_timeout_msuint6430000Lease duration in milliseconds

Response:

FieldTypeDescription
queue_idstringQueue identifier

Errors:

Error StatusCondition
ALREADY_EXISTSQueue with that name already exists

DeleteQueue

Delete a queue and all its messages.

rpc DeleteQueue(DeleteQueueRequest) returns (DeleteQueueResponse)

Request:

FieldTypeDescription
queuestringQueue name

Errors:

Error StatusCondition
NOT_FOUNDQueue does not exist

ListQueues

List all queues with summary statistics.

rpc ListQueues(ListQueuesRequest) returns (ListQueuesResponse)

Response:

FieldTypeDescription
queuesrepeated QueueInfoList of queues

QueueInfo:

FieldTypeDescription
namestringQueue name
depthuint64Number of pending messages
in_flightuint64Number of leased (in-flight) messages
active_consumersuint32Number of connected consumers

SetConfig

Set a runtime configuration key-value pair. Persisted across restarts.

rpc SetConfig(SetConfigRequest) returns (SetConfigResponse)

Request:

FieldTypeDescription
keystringConfiguration key
valuestringConfiguration value

GetConfig

Retrieve a configuration value by key.

rpc GetConfig(GetConfigRequest) returns (GetConfigResponse)

Request:

FieldTypeDescription
keystringConfiguration key

Response:

FieldTypeDescription
valuestringConfiguration value

Errors:

Error StatusCondition
NOT_FOUNDKey does not exist

ListConfig

List configuration entries, optionally filtered by prefix.

rpc ListConfig(ListConfigRequest) returns (ListConfigResponse)

Request:

FieldTypeDescription
prefixstringFilter entries by key prefix (empty = all)

Response:

FieldTypeDescription
entriesrepeated ConfigEntryKey-value pairs
total_countuint32Total number of matching entries

ConfigEntry:

FieldTypeDescription
keystringConfiguration key
valuestringConfiguration value

GetStats

Get detailed statistics for a queue, including per-fairness-key and per-throttle-key breakdowns.

rpc GetStats(GetStatsRequest) returns (GetStatsResponse)

Request:

FieldTypeDescription
queuestringQueue name

Response:

FieldTypeDescription
depthuint64Total pending messages
in_flightuint64Messages currently leased
active_fairness_keysuint64Number of fairness keys with pending messages
active_consumersuint32Connected consumers
quantumuint32DRR quantum value
per_key_statsrepeated PerFairnessKeyStatsPer-fairness-key breakdown
per_throttle_statsrepeated PerThrottleKeyStatsPer-throttle-key breakdown

PerFairnessKeyStats:

FieldTypeDescription
keystringFairness key
pending_countuint64Pending messages for this key
current_deficitint64Current DRR deficit
weightuint32DRR weight

PerThrottleKeyStats:

FieldTypeDescription
keystringThrottle key
tokensdoubleCurrent available tokens
rate_per_seconddoubleToken refill rate
burstdoubleMaximum bucket capacity

Errors:

Error StatusCondition
NOT_FOUNDQueue does not exist

Redrive

Move pending messages from a dead letter queue back to the source queue.

rpc Redrive(RedriveRequest) returns (RedriveResponse)

Request:

FieldTypeDescription
dlq_queuestringDLQ name (e.g., orders.dlq)
countuint64Maximum number of messages to redrive

Response:

FieldTypeDescription
redrivenuint64Number of messages actually moved

Only pending (non-leased) messages are redriven. Leased messages in the DLQ are skipped to avoid interfering with active consumers.

Errors:

Error StatusCondition
NOT_FOUNDDLQ does not exist

Message types

Message

The core message envelope returned by Consume.

message Message {
  string id = 1;
  map<string, string> headers = 2;
  bytes payload = 3;
  MessageMetadata metadata = 4;
  MessageTimestamps timestamps = 5;
}
FieldTypeDescription
idstringUUID assigned at enqueue
headersmap<string, string>Headers set by the producer
payloadbytesMessage body
metadataMessageMetadataBroker-assigned scheduling metadata
timestampsMessageTimestampsLifecycle timestamps

MessageMetadata

Scheduling metadata assigned by the broker (via Lua on_enqueue or defaults).

message MessageMetadata {
  string fairness_key = 1;
  uint32 weight = 2;
  repeated string throttle_keys = 3;
  uint32 attempt_count = 4;
  string queue_id = 5;
}
FieldTypeDescription
fairness_keystringDRR fairness group key
weightuint32DRR weight for this key
throttle_keysrepeated stringToken bucket keys checked before delivery
attempt_countuint32Number of delivery attempts
queue_idstringQueue this message belongs to

MessageTimestamps

message MessageTimestamps {
  google.protobuf.Timestamp enqueued_at = 1;
  google.protobuf.Timestamp leased_at = 2;
}
FieldTypeDescription
enqueued_atTimestampWhen the message was first enqueued
leased_atTimestampWhen the message was last delivered to a consumer