Ruby: Difference between revisions
PeterHicks (talk | contribs) Updated Ruby example code |
|||
Line 1: | Line 1: | ||
Install the [https://rubygems.org/gems/stomp Stomp] gem with <code>gem install stomp</code>. | |||
The following code will connect to the datafeeds service, subscribe to the the RTPPM feed and print all messages to STDOUT. | |||
To subscribe to multiple topics in a single connection, copy the <code>client.subscribe</code> section of code, change the topic name and the '-RTPPM' suffix | |||
<pre> | |||
require "stomp" | |||
class NrPollerPoller | |||
# Initialize the poller | |||
def initialize | |||
@hostname = 'datafeeds.networkrail.co.uk' | |||
@username = 'nobody@example.com' | |||
@password = 'topsecretpassword' | |||
puts "Stomp consumer for Network Rail Open Data Distribution Service" | |||
end | |||
# Connect to the service and process messages | |||
def run | |||
client_headers = { "accept-version" => "1.1", "heart-beat" => "5000,10000", "client-id" => Socket.gethostname, "host" => @hostname } | |||
client_hash = { :hosts => [ { :login => @username, :passcode => @password, :host => @hostname, :port => 61618 } ], :connect_headers => client_headers } | |||
client = Stomp::Client.new(client_hash) | |||
# Check we have connected successfully | |||
raise "Connection failed" unless client.open? | |||
raise "Unexpected protocol level #{client.protocol}" unless client.protocol == Stomp::SPL_11 | |||
raise "Connect error: #{client.connection_frame().body}" if client.connection_frame().command == Stomp::CMD_ERROR | |||
puts "Connected to #{client.connection_frame().headers['server']} server with STOMP #{client.connection_frame().headers['version']}" | |||
# Subscribe to the RTPPM topic and process messages | |||
client.subscribe("/topic/RTPPM_ALL", { 'id' => client.uuid(), 'ack' => 'client', 'activemq.subscriptionName' => Socket.gethostname + '-RTPPM' }) do |msg| | |||
puts msg.body | |||
end | |||
client.join | |||
# We will probably never end up here | |||
client.close | |||
puts "Client close complete" | |||
end | end | ||
end | |||
e = NrPollerPoller.new | |||
e.run | |||
</pre> |
Revision as of 12:19, 18 December 2012
Install the Stomp gem with gem install stomp
.
The following code will connect to the datafeeds service, subscribe to the the RTPPM feed and print all messages to STDOUT.
To subscribe to multiple topics in a single connection, copy the client.subscribe
section of code, change the topic name and the '-RTPPM' suffix
require "stomp" class NrPollerPoller # Initialize the poller def initialize @hostname = 'datafeeds.networkrail.co.uk' @username = 'nobody@example.com' @password = 'topsecretpassword' puts "Stomp consumer for Network Rail Open Data Distribution Service" end # Connect to the service and process messages def run client_headers = { "accept-version" => "1.1", "heart-beat" => "5000,10000", "client-id" => Socket.gethostname, "host" => @hostname } client_hash = { :hosts => [ { :login => @username, :passcode => @password, :host => @hostname, :port => 61618 } ], :connect_headers => client_headers } client = Stomp::Client.new(client_hash) # Check we have connected successfully raise "Connection failed" unless client.open? raise "Unexpected protocol level #{client.protocol}" unless client.protocol == Stomp::SPL_11 raise "Connect error: #{client.connection_frame().body}" if client.connection_frame().command == Stomp::CMD_ERROR puts "Connected to #{client.connection_frame().headers['server']} server with STOMP #{client.connection_frame().headers['version']}" # Subscribe to the RTPPM topic and process messages client.subscribe("/topic/RTPPM_ALL", { 'id' => client.uuid(), 'ack' => 'client', 'activemq.subscriptionName' => Socket.gethostname + '-RTPPM' }) do |msg| puts msg.body end client.join # We will probably never end up here client.close puts "Client close complete" end end e = NrPollerPoller.new e.run