Skip to content

Rabbit (Rabbit Messaging) - Provides client and server support for RabbitMQ

License

Notifications You must be signed in to change notification settings

mitya87/rabbit_messaging

 
 

Repository files navigation

Rabbit (Rabbit Messaging) · Gem Version Build Status Coverage Status

Provides client and server support for RabbitMQ

Installation

gem "rabbit_messaging"
$ bundle install
# --- or ---
$ gem install "rabbit_messaging"
require "rabbit_messaging"

Usage


Configuration

  • RabbitMQ connection configuration fetched from the bunny_options section of /config/sneakers.yml

  • Rabbit.config provides setters for following options:

    • group_id (Symbol), required

      Shared identifier which used to select api. As usual, it should be same as default project_id (I.e. we have project 'support', which runs only one application in production. So on, it's group_id should be :support)

    • project_id (Symbol), required

      Personal identifier which used to select exact service. As usual, it should be same as default project_id with optional stage_id. (I.e. we have project 'support', in production it's project_id is :support, but in staging it uses :support1 and :support2 ids for corresponding stages)

    • hooks (Hash)

      :before_fork and :after_fork hooks, used same way as in unicorn / puma / que / etc

    • environment (one of :test, :development, :production), default: :production

      Internal environment of gem.

      • :test environment stubs publishing and does not suppress errors
      • :development environment auto-creates queues and uses default exchange
      • :production environment enables handlers caching and gets maximum strictness
    • receiving_job_class_callable (Proc)

      Custom ActiveJob subclass to work with received messages.

    • exception_notifier (Proc)

      By default, exceptions are reported using ExceptionNotifier (see exception_notification gem). You can provide your own notifier like this:

        config.exception_notifier = proc { |e| MyCoolNotifier.notify!(e) }

Client

Rabbit.publish(
  routing_key: :support,
  event: :ping,
  data: { foo: :bar }, # default is {}
  exchange_name: 'fanout', # default is fine too
  confirm_select: true, # setting this to false grants you great speed up and absolutelly no guarantees
  headers: { "foo" => "bar" }, # custom arguments for routing, default is {}
)
  • This code sends messages via basic_publish with following parameters:

    • routing_key: "support"

    • exchange: "group_id.project_id.fanout" (default is "group_id.poject_id")

    • mandatory: true (same as confirm_select)

      It is set to raise error if routing failed

    • persistent: true

    • type: "ping"

    • content_type: "application/json" (always)

    • app_id: "group_id.project_id"

  • Messages are logged to /log/rabbit.log


Server

  • Server is supposed to run inside a daemon via the daemons-rails gem. Server is run with Rabbit::Daemon.run. before_fork and after_fork procs in Rabbit.config are used to teardown and setup external connections between daemon restarts, for example ORM connections

  • After the server runs, received messages are handled by Rabbit::EventHandler subclasses. Subclasses are selected by following code:

      "rabbit/handler/#{group_id}/#{event}".camelize.constantize

    They use powerful Tainbox api to handle message data. Project_id also passed to them.

    If you wish so, you can override initialize(message), where message is an object with simple api (@see lib/rabbit/receiving/message.rb)

    Handlers can specify a queue their messages will be put in via a queue_as class macro (accepts a string / symbol / block with |message, arguments| params)

  • Received messages are logged to /log/sneakers.log, malformed messages are logged to /log/malformed_messages.log and deleted from queue


Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/umbrellio/rabbit_messaging.

License

Released under MIT License

Authors

Team Umbrellio


Supported by Umbrellio

About

Rabbit (Rabbit Messaging) - Provides client and server support for RabbitMQ

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 99.6%
  • Shell 0.4%