A Ruby API for the Routemaster event bus.
Add this line to your application's Gemfile:
gem 'routemaster-client'
And then execute:
$ bundle
Or install it yourself as:
$ gem install routemaster-client
Configure your client:
require 'routemaster/client'
client = Routemaster::Client.new(url: 'https://bus.example.com', uuid: 'demo')
You can also specify a timeout value in seconds if you like with the timeout
option.
Routemaster::Client.new(url: 'https://bus.example.com', uuid: 'demo', timeout: 2)
Push an event about an entity in the topic widgets
with a callback URL:
client.created('widgets', 'https://app.example.com/widgets/1')
client.updated('widgets', 'https://app.example.com/widgets/2')
client.noop('widgets', 'https://app.example.com/widgets/3')
There are methods for the four canonical event types: created
, updated
,
deleted
, and noop
.
noop
is typically used when a subscriber is first connected (or reset), and
the publisher floods with noop
s for all existing entities so subscribers can
refresh their view of the domain.
Register to be notified about widgets
and kitten
at most 60 seconds after
events, in batches of at most 500 events, to a given callback URL:
client.subscribe(
topics: ['widgets', 'kitten'],
callback: 'https://app.example.com/events',
uuid: 'demo',
timeout: 60_000,
max: 500)
Receive events at path /events
using a Rack middleware:
require 'routemaster/receiver'
class Listener
def on_events_received(batch)
batch.each do |event|
puts event['url']
end
end
end
Wisper.subscribe(Listener.new, :prefix => true)
use Routemaster::Receiver, {
path: '/events',
uuid: 'demo'
}
This relies on the excellent event bus from the wisper gem.
Monitor the status of topics and subscriptions:
client.monitor_topics
#=> [ #<Routemaster::Topic:XXXX @name="widgets", @publisher="demo", @events=12589>, ...]
client.monitor_subscriptions
#=> [ {
# subscriber: 'bob',
# callback: 'https://app.example.com/events',
# topics: ['widgets', 'kitten'],
# events: { sent: 21_450, queued: 498, oldest: 59_603 }
# } ... ]
- Fork it ( http://github.com/HouseTrip/routemaster-client/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request