Currently the most mature client library for Ruby is the synchronous ruby-mqtt. The async em-mqtt library need to support user/password before it's usable with CloudAMQP MQTT protocol.
First you need to add mqtt as a dependency to your Gemfile and execute bundle install
In the following code snippet you can see how to publish and subscribe from CloudAMQP MQTT. Note that the client is synchronous so you have to use threads if you want to subscribe and in the same time do other things.
CLOUDAMQP_MQTT_URL Structure mqtt://cloudamqp_username:cloudamqp_password@hostname:port
require 'mqtt'
require 'uri'
# Create a hash with the connection parameters from the URL
uri = URI.parse ENV['CLOUDAMQP_MQTT_URL'] || 'mqtt://localhost:1883'
conn_opts = {
remote_host: uri.host,
remote_port: uri.port,
username: uri.user,
password: uri.password,
}
Thread.new do
MQTT::Client.connect(conn_opts) do |c|
# The block will be called when you messages arrive to the topic
c.get('test') do |topic, message|
puts "#{topic}: #{message}"
end
end
end
MQTT::Client.connect(conn_opts) do |c|
# publish a message to the topic 'test'
loop do
c.publish('test', 'Hello World')
sleep 1
end
end
Full sample code can be found here. Worth noting is that the client does not yet support other QoS levels than 0, ie. no publish acknowledge or redelivery.