hare 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +2 -2
- data/hare.gemspec +1 -1
- data/lib/hare/runner.rb +48 -23
- data/lib/hare/version.rb +1 -1
- metadata +8 -7
data/README.md
CHANGED
@@ -25,11 +25,11 @@ Example Usage
|
|
25
25
|
|
26
26
|
We'll send a message over the localhost message bus, exchange 'events', vhost '/' with route-key 'dev.event'. First, get a `hare` into listener mode:
|
27
27
|
|
28
|
-
$ hare --exchange_name events --route_key dev.event
|
28
|
+
$ hare --exchange_name events --exchange_type topic --route_key dev.event
|
29
29
|
|
30
30
|
and we'll send a message:
|
31
31
|
|
32
|
-
$ hare --exchange_name events --route_key dev.event --producer "that wasn't so bad"
|
32
|
+
$ hare --exchange_name events --exchange_type topic --route_key dev.event --producer "that wasn't so bad"
|
33
33
|
|
34
34
|
Miscellania
|
35
35
|
-----------
|
data/hare.gemspec
CHANGED
data/lib/hare/runner.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'optparse'
|
2
|
-
require '
|
2
|
+
require 'amqp'
|
3
|
+
require 'eventmachine'
|
3
4
|
|
4
5
|
module Hare
|
5
6
|
trap(:INT) { puts; exit }
|
@@ -16,14 +17,17 @@ module Hare
|
|
16
17
|
:publish => false,
|
17
18
|
:amqp => {
|
18
19
|
:host => 'localhost',
|
19
|
-
:port =>
|
20
|
+
:port => nil,
|
20
21
|
:exchange => {
|
21
22
|
:name => nil,
|
22
|
-
:kind => :
|
23
|
+
:kind => :topic,
|
23
24
|
},
|
24
25
|
:queue => '',
|
25
26
|
:vhost => '/',
|
26
|
-
:
|
27
|
+
:via_ssl => false,
|
28
|
+
:ssl_cert => nil,
|
29
|
+
:ssl_key => nil,
|
30
|
+
:ssl_verify => false
|
27
31
|
}
|
28
32
|
}
|
29
33
|
|
@@ -50,7 +54,7 @@ module Hare
|
|
50
54
|
}
|
51
55
|
opts.on("--exchange_type TYPE", "The type of the AMQP exchange on which to connect") do |type|
|
52
56
|
if ['topic', 'direct', 'fanout'].member? type
|
53
|
-
@options[:amqp][:exchange][:
|
57
|
+
@options[:amqp][:exchange][:kind] = type.to_sym
|
54
58
|
else
|
55
59
|
puts "Exchange type must be (topic|direct|fanout), not #{type}."
|
56
60
|
exit 1
|
@@ -68,15 +72,18 @@ module Hare
|
|
68
72
|
opts.on("--logging", "Enable logging of AMQP interactions.") {
|
69
73
|
@options[:logging] = true
|
70
74
|
}
|
75
|
+
opts.on("--ssl_cert CERT", "Path to SSL chain certificates") do |c|
|
76
|
+
@options[:amqp][:ssl_cert] = c
|
77
|
+
end
|
78
|
+
opts.on("--ssl_key PRIVKEY", "Path to SSL private key") do |k|
|
79
|
+
@options[:amqp][:ssl_key] = k
|
80
|
+
end
|
71
81
|
|
72
82
|
opts.separator ""
|
73
83
|
opts.separator "Consumer Options: "
|
74
84
|
opts.on("--queue QUEUE", "The queue on which to listen.") {
|
75
85
|
|q| @options[:amqp][:queue] = q
|
76
86
|
}
|
77
|
-
opts.on("--timeout TIME", "The time after which queue subscription will end.") {
|
78
|
-
|t| @options[:amqp][:timeout] = t
|
79
|
-
}
|
80
87
|
|
81
88
|
opts.separator ""
|
82
89
|
opts.separator "Producer Options: "
|
@@ -103,24 +110,42 @@ module Hare
|
|
103
110
|
def run!
|
104
111
|
amqp = @options[:amqp]
|
105
112
|
|
106
|
-
|
107
|
-
|
113
|
+
EventMachine.run do
|
114
|
+
AMQP.connect(:host => amqp[:host], :port => amqp[:port], :vhost => amqp[:vhost],
|
115
|
+
:username => amqp[:username], :password => amqp[:password], :ssl => {
|
116
|
+
:cert_chain_file => amqp[:ssl_cert],
|
117
|
+
:private_key_file => amqp[:ssl_key]
|
118
|
+
},
|
119
|
+
:on_tcp_connection_failure => Proc.new { |settings|
|
120
|
+
puts "TCP Connection failure; details:\n\n#{settings.inspect}\n\n"; exit 1
|
121
|
+
},
|
122
|
+
:on_possible_authentication_failure => Proc.new { |settings|
|
123
|
+
puts "Authentication failure, I'm afraid:\n\n#{settings.inspect}\n\n"; exit 1
|
124
|
+
}) do |connection|
|
125
|
+
|
126
|
+
channel = AMQP::Channel.new(connection)
|
127
|
+
case amqp[:exchange][:kind]
|
128
|
+
when :direct
|
129
|
+
exchange = channel.direct(amqp[:exchange][:name])
|
130
|
+
when :fanout
|
131
|
+
exchange = channel.fanout(amqp[:exchange][:name])
|
132
|
+
when :topic
|
133
|
+
exchange = channel.topic(amqp[:exchange][:name])
|
134
|
+
end
|
108
135
|
|
109
|
-
|
110
|
-
|
136
|
+
if @options[:publish]
|
137
|
+
exchange.publish(@arguments[0], :routing_key => amqp[:key]) do
|
138
|
+
connection.disconnect { EM.stop }
|
139
|
+
end
|
140
|
+
else
|
141
|
+
channel.queue(amqp[:queue]).bind(exchange, :key => amqp[:key]).subscribe do |payload|
|
142
|
+
puts payload
|
143
|
+
end
|
144
|
+
end
|
111
145
|
|
112
|
-
if @options[:publish]
|
113
|
-
exch.publish(@arguments[0].rstrip + "\n", :key => amqp[:key])
|
114
|
-
else
|
115
|
-
q = b.queue(amqp[:queue])
|
116
|
-
q.bind(exch, :key => amqp[:key])
|
117
|
-
q.subscribe(:timeout => amqp[:timeout]) do |msg|
|
118
|
-
puts "#{msg[:payload]}"
|
119
146
|
end
|
120
|
-
end
|
121
|
-
|
122
|
-
b.stop
|
123
|
-
end
|
147
|
+
end # EM
|
148
|
+
end # run!
|
124
149
|
|
125
150
|
end
|
126
151
|
end
|
data/lib/hare/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: amqp
|
16
|
+
requirement: &85280730 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.9.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *85280730
|
25
25
|
description: The one pain-point I have had with AMQP is the lack of a series of command
|
26
26
|
line tools for smoke-testing components or sending my own messages through a queue.
|
27
27
|
Hare can be toggled either to produce messages, or to sit and listen/report for
|
@@ -68,3 +68,4 @@ signing_key:
|
|
68
68
|
specification_version: 3
|
69
69
|
summary: A small command-line tool for publishing to and consuming from AMQP queues.
|
70
70
|
test_files: []
|
71
|
+
has_rdoc:
|