Skip to content

fast-programmer/outboxer

Repository files navigation

📤 Outboxer

Gem Version Coverage Status Join our Discord

Outboxer is an implementation of the transactional outbox pattern for Ruby on Rails applications.

It helps migrate your existing stack to event-driven architecture whilst avoiding the dual write problem.

Quickstart

1. Install gem

bundle add outboxer
bundle install

2. Generate schema migrations, publisher script and tests

bin/rails g outboxer:install

3. Migrate database

bin/rails db:migrate

4. Generate basic event schema and model

bin/rails generate model Event type:string created_at:datetime --skip-timestamps
bin/rails db:migrate

5. Queue message after event created

# app/models/event.rb

class Event < ApplicationRecord
  after_create do |event|
    Outboxer::Message.queue(messageable: event)
  end
end

6. Publish messages

# bin/outboxer_publisher

Outboxer::Publisher.publish_messages do |publisher, messages|
  messages.each do |message|
    # TODO: publish messages here
    # see https://github.com/fast-programmer/outboxer/wiki/Outboxer-publisher-block-examples

    Outboxer::Message.published_by_ids(
      ids: [message[:id]],
      publisher_id: publisher[:id],
      publisher_name: publisher[:name])
  rescue => error
    Outboxer::Message.failed_by_ids(
      ids: [message[:id]],
      exception: error,
      publisher_id: publisher[:id],
      publisher_name: publisher[:name])
  end
end

Testing

The generated spec/bin/outboxer_publisher adds end to end queue and publish message test coverage.

Monitoring

Monitor using the built-in web UI:

Publishers

Screenshot 2025-04-30 at 6 25 06 pm

Messages

Screenshot 2025-04-30 at 6 25 37 pm

Rails

# config/routes.rb

require 'outboxer/web'

mount Outboxer::Web, at: '/outboxer'

Rack

# config.ru

require 'outboxer/web'

map '/outboxer' { run Outboxer::Web }

Contributing

All contributions are welcome!

License

Open-sourced under LGPL v3.0.

About

Transactional outbox for Ruby on Rails apps

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages