____ _ _ _ _ __ __ ___ ____ _ _ _
| _ \ __ _| |__ | |__ (_) |_| \/ |/ _ \ / ___| (_) ___ _ __ | |_
| |_) / _` | '_ \| '_ \| | __| |\/| | | | | | | | | |/ _ \ '_ \| __|
| _ < (_| | |_) | |_) | | |_| | | | |_| | | |___| | | __/ | | | |_
|_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__\_\ \____|_|_|\___|_| |_|\__|
Simplifying RabbitMQ for Ruby apps!
RabbitMQ Client is a ruby client library for applications dealing with RabbitMQ.
bunny
and connection_pool
to manage RabbitMQ communications.Why RabbitMQ Client? Why not bunny
and connection_pool
directly? Well, gems are just a clients. You still need to write a lot of code to manage proper subscribing and publishing of messages. You need to do error handling, passing request headers to RabbitMQ and maybe logging/instrumenting the message management process. Finally, you also need to consider how to deploy your app and how to start it.
With RabbitMQ Client by your side, all this becomes smooth and easy.
Add this line to your application's Gemfile:
gem 'rabbitmq_client'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rabbitmq_client
RabbitMQ Client can be used to publsih and subscribe RabbitMQ messages.
RabbitMQ Client support the following configurations
Configuration | Description | Default Value |
---|---|---|
rabbitmq_url | RabbitMQ server URL | amqp://guest:[email protected]:5672 |
logger_configs.logs_format | RabbitmqClient logs format.values can be either json or plain | plain |
logger_configs.logs_level | RabbitmqClient logs level.values can be one of :debug, :info, :error | info |
logger_configs.logs_filename | Logs file name, if nil STOUT will be used | nil |
logger_configs.logger | Logger object, if nil STOUT logger will created | nil |
session_params.heartbeat_publisher | Heartbeat interval for publisher sessions.0 means no heartbeat | 0 |
session_params.session_pool | Number of sessions with rabbitmq | 1 |
plugins | Array of used plugins | [] |
global_store | Global Store used to store tags and headers: RequestHeaderMiddlewareRequestStore | nil |
whitelist | List of whitelisted headers | ['x-request-id'.to_sym] |
RabbitmqClient.configure do |config|
config.rabbitmq_url = "${rabbitmq_url}"
config.logger_configs = {
logs_format: 'plain',
logs_level: :info,
logs_filename: nil,
logger: nil
}
config.session_params = {
heartbeat_publisher: 0,
session_pool: 1
}
config.plugins = []
config.global_store = RequestHeaderMiddleware
config.whitelist = ['x-request-id'.to_sym]
end
RabbitmqClient.plugins << MYRabbitmqClientPlugin
RabbitmqClient.whitelist << :white_listed_header_key
# RabbitmqClient.add_exchange(exchange, type, options)
RabbitmqClient.add_exchange('default.rabbitmq_client', :topic, {})
# RabbitmqClient.publish(payload, options)
RabbitmqClient.publish({id: 10, name: 'rabbitmq_client'}, { exchange_name: 'default.rabbitmq_client' })
config = {
rabbitmq_url: val,
exchange_registry: val,
session_params: { heartbeat_publisher: val }
}
publisher = RabbitmqClient::Publisher.new(config)
publisher.publish(payload, options)
RabbitmqClient plugins are classes that define a callbacks that can be executed before or after events that occuers during RabbitmqClient lifecycle. Current supprted lifecycle events are:
Here is an example where we define a plugin to add some headers to message options before publishing the message.
class MQTestPlugin < RabbitmqClient::Plugin
callbacks do |lifecycle|
lifecycle.before(:publish) do |_message, options|
options[:headers] = { test_key: 'test'}
end
end
end
RabbitmqClient.plugins << MQTestPlugin
After checking out the repo:
bin/setup
to install dependenciesscript/travis.sh
to run the tests.You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/wshihadeh/rabbitmq_client.
The gem is available as open source under the terms of the MIT License.