50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
require 'sylvilagus/init'
|
|
require 'sylvilagus/ch04'
|
|
require 'optparse'
|
|
require 'json'
|
|
require 'rabbitmq-client.jar'
|
|
|
|
class Sylvilagus::Ch04::AlertProducer
|
|
def main
|
|
options = {}
|
|
OptionParser.new do |opts|
|
|
opts.on('-rROUTING_KEY', '--routing-key=ROUTING_KEY',
|
|
'Routing key for message (e.g. myalert.im)') do |r|
|
|
options[:routing_key] = r
|
|
end
|
|
opts.on('-mMESSAGE', '--message=MESSAGE',
|
|
'Message text for alert.') do |m|
|
|
options[:message] = m
|
|
end
|
|
end.parse!
|
|
|
|
unless options[:message] && options[:routing_key]
|
|
STDERR.puts 'Need both message and routing_key!'
|
|
exit 1
|
|
end
|
|
|
|
factory = Java::ComRabbitmqClient::ConnectionFactory.new
|
|
factory.uri = ENV.fetch('SYLVILAGUS_ALERT_AMQP_URI')
|
|
@conn = factory.new_connection
|
|
channel = @conn.create_channel
|
|
channel.exchange_declare('alerts', 'topic', true, false, false, nil)
|
|
|
|
props = Java::ComRabbitmqClient::AMQP::BasicProperties.new
|
|
props.content_type = 'application/json'
|
|
|
|
json_msg = JSON.dump({'message' => options[:message]})
|
|
channel.basic_publish('alerts', options[:routing_key],
|
|
true, true, props, json_msg.to_java_bytes)
|
|
|
|
puts "Sent message #{json_msg.inspect} tagged " <<
|
|
"with routing key #{options[:routing_key].inspect} to " <<
|
|
'exchange "alerts" on vhost "/".'
|
|
ensure
|
|
@conn.close if @conn
|
|
end
|
|
end
|
|
|
|
if $0 == __FILE__
|
|
Sylvilagus::Ch04::AlertProducer.new.main
|
|
end
|