GorgMessageSender
GorgMessageSender is a very simple RabbitMQ message sender using Gadz.org SOA JSON Schema
Installation
Add this line to your application's Gemfile:
gem 'gorg_message_sender'
And then execute:
$ bundle
Or install it yourself as:
$ gem install gorg_message_sender
Usage
Configuration
GorgMessageSender can be configure to change its default values :
GorgMessageSender.configure do |c|
# Id used to set the event_sender_id
#c.application_id = "gms"
# RabbitMQ network and authentification
#c.host = "localhost"
#c.port = 5672
#c.vhost = "/"
#c.user = nil
#c.password = nil
# Exchange configuration
#c.exchange_name ="exchange"
#c.durable_exchange= true
end
This based configuration can be overridden when needed :
sender=GorgMessageSender.new(host: "my_host",
port: 1234,
user: "My_user",
pass: "1zae125a",
exchange_name: "some_exchange",
vhost: "/foo",
app_id: "bar",
durable_exchange: false)
Generating a message
sender=GorgMessageSender.new()
sender.({this_is: "my data hash"},"some.routing.key")
# With default configuration
# => "{\"event_uuid\":\"095dcff6-665d-4194-bdfe-f889f8cedb09\",\"event_name\":\"some.routing.key\",\"event_creation_time\":\"2016-05-31T08:53:32+02:00\",\"event_sender_id\":\"gms\",\"data\":{\"this_is\":\"my data hash\"}}"
event_uuid
, event_creation_time
and event_sender_id
can be overridden :
sender=GorgMessageSender.new()
sender.({this_is: "my data hash"},
"some.routing.key",
event_uuid: "8c4abe62-26fe-11e6-b67b-9e71128cae77",
event_creation_time: DateTime.new(2084,05,10,01,57,00),
event_sender_id: "some_app_id"
)
# => "{\"event_uuid\":\"8c4abe62-26fe-11e6-b67b-9e71128cae77\",\"event_name\":\"some.routing.key\",\"event_creation_time\":\"2084-05-10T01:57:00+00:00\",\"event_sender_id\":\"some_app_id\",\"data\":{\"this_is\":\"my data hash\"}}"
Message validation
By default, GorgMessageSender validate message against the Gadz.org SOA JSON Schema. You can force message generation for testing purpose with the option skip_validation
sender.({this_is: "my data hash"},
"some.routing.key",
event_uuid: "this is not a valid uuid"
)
# With default configuration
# => RAISE JSON::Schema::ValidationError
sender.({this_is: "my data hash"},
"some.routing.key",
event_uuid: "this is not a valid uuid",
skip_validation: true
)
# With default configuration
# => "{\"event_uuid\":\"this is not a valid uuid\",\"event_name\":\"some.routing.key\",\"event_creation_time\":\"2016-05-31T09:15:21+02:00\",\"event_sender_id\":\"gms\",\"data\":{\"this_is\":\"my data hash\"}}"
Sending a message
To send a message, use the send
command. It expects the same params than message
:
sender=GorgMessageSender.new(exchange_name: "my_exchange")
sender.({this_is: "my data hash"},"some.routing.key")
# Message is sent to the exchange "my_exchange" with routing key "some.routing.key"
# => "{\"event_uuid\":\"095dcff6-665d-4194-bdfe-f889f8cedb09\",\"event_name\":\"some.routing.key\",\"event_creation_time\":\"2016-05-31T08:53:32+02:00\",\"event_sender_id\":\"gms\",\"data\":{\"this_is\":\"my data hash\"}}"
sender.({this_is: "my data hash"},
"some.routing.key",
event_uuid: "8c4abe62-26fe-11e6-b67b-9e71128cae77",
event_creation_time: DateTime.new(2084,05,10,01,57,00),
event_sender_id: "some_app_id"
)
# Message is sent to the exchange "my_exchange" with routing key "some.routing.key"
# => "{\"event_uuid\":\"8c4abe62-26fe-11e6-b67b-9e71128cae77\",\"event_name\":\"some.routing.key\",\"event_creation_time\":\"2084-05-10T01:57:00+00:00\",\"event_sender_id\":\"some_app_id\",\"data\":{\"this_is\":\"my data hash\"}}"
sender.({this_is: "my data hash"},
"some.routing.key",
event_uuid: "this is not a valid uuid"
)
# => RAISE JSON::Schema::ValidationError
sender.({this_is: "my data hash"},
"some.routing.key",
event_uuid: "this is not a valid uuid",
skip_validation: true
)
# Message is sent to the exchange "my_exchange" with routing key "some.routing.key"
# => "{\"event_uuid\":\"this is not a valid uuid\",\"event_name\":\"some.routing.key\",\"event_creation_time\":\"2016-05-31T09:15:21+02:00\",\"event_sender_id\":\"gms\",\"data\":{\"this_is\":\"my data hash\"}}"
send_message
also accepts the verbose
params to print sending informations in SDOUT
sender.({this_is: "my data hash"},
"some.routing.key",
verbose: true
)
Sending a raw message
You can also send any raw string with send_raw
sender.send_raw("my message content",
"some.routing.key",
verbose: true
)
To Do
- Bunny error handling
- Allow sending messages in queues
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
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.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/Zooip/gorg_message_sender.
License
The gem is available as open source under the terms of the MIT License.