/
nats-sub
executable file
·46 lines (36 loc) · 971 Bytes
/
nats-sub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env ruby
require 'optparse'
require 'rubygems'
require 'nats/client'
['TERM', 'INT'].each { |s| trap(s) { puts; exit! } }
def usage
puts "Usage: nats-sub <subject> [-s server] [-t] [-r]"; exit
end
args = ARGV.dup
opts_parser = OptionParser.new do |opts|
opts.on('-s SERVER') { |server| $nats_server = server }
opts.on('-t','--time') { $show_time = true }
opts.on('-r','--raw') { $show_raw = true }
end
args = opts_parser.parse!(args)
subject = args.shift
usage unless subject
def time_prefix
"[#{Time.now}] " if $show_time
end
def header
$i=0 unless $i
"#{time_prefix}[\##{$i+=1}]"
end
def decorate sub, msg
if $show_raw
msg
else
"#{header} Received on [#{sub}] : '#{msg}'"
end
end
NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
NATS.start(:uri => $nats_server, :autostart => true) do
puts "Listening on [#{subject}]" unless $show_raw
NATS.subscribe(subject) { |msg, _, sub| puts decorate(sub, msg) }
end