Chapter 4. Examples
This chapter demonstrates the use of AMQ Ruby through example programs. To run them, make sure you have completed the steps in the Chapter 2, Installation chapter for your environment and you have a running and configured broker.
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.length > 2
conn_url, address = ARGV[0..1]
else
abort "Usage: receive.rb CONNECTION-URL ADDRESS [MESSAGE-COUNT]\n"
end
begin
desired = Integer(ARGV[2])
rescue ArgumentError
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