Chapter 4. Examples
This chapter demonstrates the use of AMQ Ruby through example programs.
4.1. Sending messages Copy linkLink copied to clipboard!
This client program connects to a server using <connection-url>, creates a sender for target <address>, sends a message containing <message-body>, closes the connection, and exits.
Example: Sending messages
require 'qpid_proton'
class SendHandler < Qpid::Proton::MessagingHandler
def initialize(conn_url, address, message_body)
super()
@conn_url = conn_url
@address = address
@message_body = message_body
end
def on_container_start(container)
conn = container.connect(@conn_url)
conn.open_sender(@address)
end
def on_sender_open(sender)
puts "SEND: Opened sender for target address '#{sender.target.address}'\n"
end
def on_sendable(sender)
message = Qpid::Proton::Message.new(@message_body)
sender.send(message)
puts "SEND: Sent message '#{message.body}'\n"
sender.close
sender.connection.close
end
end
if ARGV.size == 3
conn_url, address, message_body = ARGV
else
abort "Usage: send.rb <connection-url> <address> <message-body>\n"
end
handler = SendHandler.new(conn_url, address, message_body)
container = Qpid::Proton::Container.new(handler)
container.run
Running the example
To run the example program, copy it to a local file and invoke it using the ruby command.
$ ruby send.rb amqp://localhost queue1 hello
4.2. Receiving messages Copy linkLink copied to clipboard!
This client program connects to a server using <connection-url>, creates a receiver for source <address>, and receives messages until it is terminated or it reaches <count> messages.
Example: Receiving messages
require 'qpid_proton'
class ReceiveHandler < Qpid::Proton::MessagingHandler
def initialize(conn_url, address, desired)
super()
@conn_url = conn_url
@address = address
@desired = desired
@received = 0
end
def on_container_start(container)
conn = container.connect(@conn_url)
conn.open_receiver(@address)
end
def on_receiver_open(receiver)
puts "RECEIVE: Opened receiver for source address '#{receiver.source.address}'\n"
end
def on_message(delivery, message)
puts "RECEIVE: Received message '#{message.body}'\n"
@received += 1
if @received == @desired
delivery.receiver.close
delivery.receiver.connection.close
end
end
end
if ARGV.size > 1
conn_url, address = ARGV[0..1]
else
abort "Usage: receive.rb <connection-url> <address> [<message-count>]\n"
end
begin
desired = Integer(ARGV[2])
rescue TypeError
desired = 0
end
handler = ReceiveHandler.new(conn_url, address, desired)
container = Qpid::Proton::Container.new(handler)
container.run
Running the example
To run the example program, copy it to a local file and invoke it using the ruby command.
$ ruby receive.rb amqp://localhost queue1