-
Notifications
You must be signed in to change notification settings - Fork 1
How outboxer works
Adam Mikulasev edited this page Apr 18, 2025
·
8 revisions
sequenceDiagram
participant A as Application Service
participant T as ActiveRecord::Base.transaction
participant E as Event
participant Q as Outboxer::Message
participant M as Outboxer::Models::Message
A->>T: begin
activate T
T->>E: create!
note right of E: in after_create callback
E->>Q: queue(messageable: event)
activate Q
Q->>M: create!(messageable: event, status: "queued")
deactivate Q
T->>T: commit
deactivate T
sequenceDiagram
participant CLI as bin/outboxer_publisher
participant P as Outboxer::Publisher
participant M as Outboxer::Models::Message
participant J as OutboxerIntegration::PublishMessageJob
participant R as Redis (Sidekiq)
CLI->>P: publish_message(&block)
activate P
P->>M: dequeue(status: "queued")
loop for each message
P->>M: update status: "publishing"
P->>J: perform_async(message_id, messageable_id, messageable_type)
J->>R: enqueue Sidekiq job
R-->>J: acknowledged
P->>M: update status: "published"
end
P-->>CLI: return
deactivate P