amq-client 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/.gitmodules +9 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/.yardopts +1 -0
- data/CONTRIBUTORS +3 -0
- data/Gemfile +27 -0
- data/LICENSE +20 -0
- data/README.textile +61 -0
- data/amq-client.gemspec +34 -0
- data/bin/jenkins.sh +23 -0
- data/bin/set_test_suite_realms_up.sh +24 -0
- data/examples/coolio_adapter/basic_consume.rb +49 -0
- data/examples/coolio_adapter/basic_consume_with_acknowledgements.rb +43 -0
- data/examples/coolio_adapter/basic_consume_with_rejections.rb +43 -0
- data/examples/coolio_adapter/basic_publish.rb +35 -0
- data/examples/coolio_adapter/channel_close.rb +24 -0
- data/examples/coolio_adapter/example_helper.rb +39 -0
- data/examples/coolio_adapter/exchange_declare.rb +28 -0
- data/examples/coolio_adapter/kitchen_sink1.rb +48 -0
- data/examples/coolio_adapter/queue_bind.rb +32 -0
- data/examples/coolio_adapter/queue_purge.rb +32 -0
- data/examples/coolio_adapter/queue_unbind.rb +37 -0
- data/examples/eventmachine_adapter/authentication/plain_password_with_custom_role_credentials.rb +36 -0
- data/examples/eventmachine_adapter/authentication/plain_password_with_default_role_credentials.rb +27 -0
- data/examples/eventmachine_adapter/authentication/plain_password_with_incorrect_credentials.rb +18 -0
- data/examples/eventmachine_adapter/basic_cancel.rb +49 -0
- data/examples/eventmachine_adapter/basic_consume.rb +51 -0
- data/examples/eventmachine_adapter/basic_consume_with_acknowledgements.rb +45 -0
- data/examples/eventmachine_adapter/basic_consume_with_rejections.rb +45 -0
- data/examples/eventmachine_adapter/basic_get.rb +57 -0
- data/examples/eventmachine_adapter/basic_get_with_empty_queue.rb +53 -0
- data/examples/eventmachine_adapter/basic_publish.rb +38 -0
- data/examples/eventmachine_adapter/basic_qos.rb +29 -0
- data/examples/eventmachine_adapter/basic_recover.rb +29 -0
- data/examples/eventmachine_adapter/basic_return.rb +34 -0
- data/examples/eventmachine_adapter/channel_close.rb +24 -0
- data/examples/eventmachine_adapter/channel_flow.rb +36 -0
- data/examples/eventmachine_adapter/channel_level_exception_handling.rb +44 -0
- data/examples/eventmachine_adapter/example_helper.rb +39 -0
- data/examples/eventmachine_adapter/exchange_declare.rb +54 -0
- data/examples/eventmachine_adapter/extensions/rabbitmq/handling_confirm_select_ok.rb +31 -0
- data/examples/eventmachine_adapter/extensions/rabbitmq/publisher_confirmations_with_transient_messages.rb +56 -0
- data/examples/eventmachine_adapter/extensions/rabbitmq/publisher_confirmations_with_unroutable_message.rb +46 -0
- data/examples/eventmachine_adapter/kitchen_sink1.rb +50 -0
- data/examples/eventmachine_adapter/queue_bind.rb +32 -0
- data/examples/eventmachine_adapter/queue_declare.rb +34 -0
- data/examples/eventmachine_adapter/queue_purge.rb +32 -0
- data/examples/eventmachine_adapter/queue_unbind.rb +37 -0
- data/examples/eventmachine_adapter/tx_commit.rb +29 -0
- data/examples/eventmachine_adapter/tx_rollback.rb +29 -0
- data/examples/eventmachine_adapter/tx_select.rb +27 -0
- data/examples/socket_adapter/basics.rb +19 -0
- data/examples/socket_adapter/connection.rb +53 -0
- data/examples/socket_adapter/multiple_connections.rb +17 -0
- data/irb.rb +66 -0
- data/lib/amq/client.rb +15 -0
- data/lib/amq/client/adapter.rb +356 -0
- data/lib/amq/client/adapters/coolio.rb +221 -0
- data/lib/amq/client/adapters/event_machine.rb +228 -0
- data/lib/amq/client/adapters/socket.rb +89 -0
- data/lib/amq/client/channel.rb +338 -0
- data/lib/amq/client/connection.rb +246 -0
- data/lib/amq/client/entity.rb +117 -0
- data/lib/amq/client/exceptions.rb +86 -0
- data/lib/amq/client/exchange.rb +163 -0
- data/lib/amq/client/extensions/rabbitmq.rb +5 -0
- data/lib/amq/client/extensions/rabbitmq/basic.rb +36 -0
- data/lib/amq/client/extensions/rabbitmq/confirm.rb +254 -0
- data/lib/amq/client/framing/io/frame.rb +32 -0
- data/lib/amq/client/framing/string/frame.rb +62 -0
- data/lib/amq/client/logging.rb +56 -0
- data/lib/amq/client/mixins/anonymous_entity.rb +21 -0
- data/lib/amq/client/mixins/status.rb +62 -0
- data/lib/amq/client/protocol/get_response.rb +55 -0
- data/lib/amq/client/queue.rb +450 -0
- data/lib/amq/client/settings.rb +83 -0
- data/lib/amq/client/version.rb +5 -0
- data/spec/benchmarks/adapters.rb +77 -0
- data/spec/client/framing/io_frame_spec.rb +57 -0
- data/spec/client/framing/string_frame_spec.rb +57 -0
- data/spec/client/protocol/get_response_spec.rb +79 -0
- data/spec/integration/coolio/basic_ack_spec.rb +41 -0
- data/spec/integration/coolio/basic_get_spec.rb +73 -0
- data/spec/integration/coolio/basic_return_spec.rb +33 -0
- data/spec/integration/coolio/channel_close_spec.rb +26 -0
- data/spec/integration/coolio/channel_flow_spec.rb +46 -0
- data/spec/integration/coolio/spec_helper.rb +31 -0
- data/spec/integration/coolio/tx_commit_spec.rb +40 -0
- data/spec/integration/coolio/tx_rollback_spec.rb +44 -0
- data/spec/integration/eventmachine/basic_ack_spec.rb +40 -0
- data/spec/integration/eventmachine/basic_get_spec.rb +73 -0
- data/spec/integration/eventmachine/basic_return_spec.rb +35 -0
- data/spec/integration/eventmachine/channel_close_spec.rb +26 -0
- data/spec/integration/eventmachine/channel_flow_spec.rb +32 -0
- data/spec/integration/eventmachine/spec_helper.rb +22 -0
- data/spec/integration/eventmachine/tx_commit_spec.rb +47 -0
- data/spec/integration/eventmachine/tx_rollback_spec.rb +35 -0
- data/spec/regression/bad_frame_slicing_in_adapters_spec.rb +59 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/unit/client/adapter_spec.rb +49 -0
- data/spec/unit/client/entity_spec.rb +49 -0
- data/spec/unit/client/logging_spec.rb +60 -0
- data/spec/unit/client/mixins/status_spec.rb +72 -0
- data/spec/unit/client/settings_spec.rb +27 -0
- data/spec/unit/client_spec.rb +11 -0
- data/tasks.rb +11 -0
- metadata +202 -0
data/.gitignore
ADDED
data/.gitmodules
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
[submodule "vendor/amq-protocol"]
|
2
|
+
path = vendor/amq-protocol
|
3
|
+
url = https://github.com/ruby-amqp/amq-protocol.git
|
4
|
+
[submodule "vendor/cool.io"]
|
5
|
+
path = vendor/cool.io
|
6
|
+
url = https://github.com/tarcieri/cool.io.git
|
7
|
+
[submodule "vendor/evented-spec"]
|
8
|
+
path = vendor/evented-spec
|
9
|
+
url = git://github.com/markiz/evented-spec.git
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--no-private --protected lib/amq/**/*.rb
|
data/CONTRIBUTORS
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
source :rubygems
|
4
|
+
|
5
|
+
gem "eventmachine", "0.12.10" #, "1.0.0.beta.3"
|
6
|
+
# cool.io uses iobuffer that won't compile on JRuby
|
7
|
+
# (and, probably, Windows)
|
8
|
+
gem "cool.io", :platform => :ruby
|
9
|
+
gem "amq-protocol", :git => "git://github.com/ruby-amqp/amq-protocol.git", :branch => "master"
|
10
|
+
|
11
|
+
group :development do
|
12
|
+
gem "yard"
|
13
|
+
# yard tags this buddy along
|
14
|
+
gem "RedCloth"
|
15
|
+
|
16
|
+
gem "nake", :platform => :ruby_19
|
17
|
+
gem "contributors", :platform => :ruby_19
|
18
|
+
|
19
|
+
# excludes Windows and JRuby
|
20
|
+
gem "perftools.rb", :platform => :mri
|
21
|
+
end
|
22
|
+
|
23
|
+
group :test do
|
24
|
+
gem "rspec", ">=2.0.0"
|
25
|
+
gem "autotest"
|
26
|
+
gem "evented-spec", :git => "git://github.com/ruby-amqp/evented-spec.git", :branch => "master"
|
27
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Jakub Šťastný aka Botanicus
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.textile
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
h2. About amq-client
|
2
|
+
|
3
|
+
amq-client is a fully-featured, low-level AMQP 0.9.1 client that runs on Ruby 1.8.7, 1.9.2, REE, Rubinius and JRuby.
|
4
|
+
It's sweet spot is in serving as foundation for higher-level, more opinionated AMQP libraries.
|
5
|
+
It can be used directly by applications code when performance and access to
|
6
|
+
advanced AMQP protocol features is more important that API convenience.
|
7
|
+
|
8
|
+
h2(#amqp_gems_family). How does amq-client relate to amqp gem, amq-protocol and libraries like bunny?
|
9
|
+
|
10
|
+
<pre>
|
11
|
+
|--------------| |-----------------------| |----------------------|
|
12
|
+
| AMQ-Protocol | | AMQ-Client | | AMQP gem, bunny, etc |
|
13
|
+
| - Encoding | ===> | - IO abstraction | ===> | - high-level API |
|
14
|
+
| - Decoding | | - Low-level AMQP API | | - opinionated |
|
15
|
+
| - Framing | |-----------------------| |----------------------|
|
16
|
+
|--------------|
|
17
|
+
|
18
|
+
</pre>
|
19
|
+
|
20
|
+
* At the lowest level, "AMQ-Protocol gem":http://github.com/ruby-amqp/amq-protocol takes care of encoding, decoding and framing.
|
21
|
+
* One level above is "AMQ-Client gem":http://github.com/ruby-amqp/amq-client that takes care of network I/O, provides uniform interface for
|
22
|
+
various I/O libraries like "EventMachine":http://rubyeventmachine.com/, "cool.io":http://coolio.github.com/ or good old TCP sockets and implements
|
23
|
+
AMQP protocol entities (queues, exchanges, channels and so on) with emphasis on access to every feature available over API convenience or
|
24
|
+
conciseness.
|
25
|
+
* Finally, end applications use
|
26
|
+
|
27
|
+
h2. Adapters
|
28
|
+
|
29
|
+
Version 1.0 will feature 3 adapters:
|
30
|
+
|
31
|
+
* EventMachine (asynchronous)
|
32
|
+
* cool.io (asynchronous)
|
33
|
+
* TCP sockets (synchronous)
|
34
|
+
|
35
|
+
h2. Installation
|
36
|
+
|
37
|
+
If you use Bundler and want to use the very latest version, add this to your Gemfile:
|
38
|
+
|
39
|
+
<pre>
|
40
|
+
gem 'amq-client', :git => 'https://github.com/ruby-amqp/amq-client.git'
|
41
|
+
</pre>
|
42
|
+
|
43
|
+
|
44
|
+
h2. Nightly Builds
|
45
|
+
|
46
|
+
You can always find nightly builds at "gems.101ideas.cz":http://gems.101ideas.cz.
|
47
|
+
You can install them thusly:
|
48
|
+
|
49
|
+
<pre>
|
50
|
+
wget http://gems.101ideas.cz/amq-client-nightly.gem
|
51
|
+
gem install amq-client-nightly.gem
|
52
|
+
</pre>
|
53
|
+
|
54
|
+
h2. See also
|
55
|
+
|
56
|
+
* "API documentation":http://rdoc.info/github/ruby-amqp/amq-client/master/frames
|
57
|
+
* "Examples":https://github.com/ruby-amqp/amq-client/tree/master/examples/
|
58
|
+
* "Jabber room for contributors":xmpp://amqp-dev@conf.netlab.cz
|
59
|
+
* "Ruby AMQP mailing list":http://groups.google.com/group/ruby-amqp
|
60
|
+
* "Issue tracker":http://github.com/ruby-amqp/amq-client/issues
|
61
|
+
* "Continous integration server":http://travis-ci.org/#!/ruby-amqp/amq-client
|
data/amq-client.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env gem build
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "base64"
|
5
|
+
require File.expand_path("../lib/amq/client/version", __FILE__)
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "amq-client"
|
9
|
+
s.version = AMQ::Client::VERSION.dup
|
10
|
+
s.authors = ["Jakub Stastny", "Michael S. Klishin", "Theo Hultberg", "Mark Abramov"]
|
11
|
+
s.email = [Base64.decode64("c3Rhc3RueUAxMDFpZGVhcy5jeg==\n"), "michael@novemberain.com"]
|
12
|
+
s.homepage = "http://github.com/ruby-amqp/amq-client"
|
13
|
+
s.summary = "amq-client is a fully-featured, low-level AMQP 0.9.1 client"
|
14
|
+
s.description = <<-DESC
|
15
|
+
amq-client supports multiple networking adapters (EventMachine, TCP sockets, cool.io) and
|
16
|
+
supposed to back more opinionated AMQP clients (such as amqp gem, bunny, et cetera) or be used directly
|
17
|
+
in cases when access to more advanced AMQP 0.9.1 features is more important that convenient APIs
|
18
|
+
DESC
|
19
|
+
s.cert_chain = nil
|
20
|
+
s.has_rdoc = true
|
21
|
+
|
22
|
+
# files
|
23
|
+
s.files = `git ls-files`.split("\n").reject { |file| file =~ /^vendor\// }
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
s.extra_rdoc_files = ["README.textile"] + Dir.glob("doc/*")
|
26
|
+
|
27
|
+
# Dependencies
|
28
|
+
s.add_dependency "eventmachine", "~> 0.12.10"
|
29
|
+
s.add_dependency "amq-protocol"
|
30
|
+
|
31
|
+
|
32
|
+
# RubyForge
|
33
|
+
s.rubyforge_project = "amq-client"
|
34
|
+
end
|
data/bin/jenkins.sh
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
echo -e "\n\n==== Setup ===="
|
4
|
+
source /etc/profile
|
5
|
+
git fetch && git reset origin/master --hard
|
6
|
+
|
7
|
+
echo -e "\n\n==== Ruby 1.9.2 Head ===="
|
8
|
+
rvm use 1.9.2-head@ruby-amqp
|
9
|
+
gem install bundler --no-ri --no-rdoc
|
10
|
+
bundle install --path vendor/bundle/1.9.2 --without development; echo
|
11
|
+
bundle update amq-protocol evented-spec; echo
|
12
|
+
bundle exec rspec spec
|
13
|
+
return_status=$?
|
14
|
+
|
15
|
+
echo -e "\n\n==== Ruby 1.8.7 ===="
|
16
|
+
rvm use 1.8.7@ruby-amqp
|
17
|
+
gem install bundler --no-ri --no-rdoc
|
18
|
+
bundle install --path vendor/bundle/1.8.7 --without development; echo
|
19
|
+
bundle update; echo
|
20
|
+
bundle exec rspec spec
|
21
|
+
return_status=$(expr $return_status + $?)
|
22
|
+
|
23
|
+
test $return_status -eq 0
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# guest:guest has full access to /
|
4
|
+
|
5
|
+
rabbitmqctl add_vhost /
|
6
|
+
rabbitmqctl add_user guest guest
|
7
|
+
rabbitmqctl set_permissions -p / guest ".*" ".*" ".*"
|
8
|
+
|
9
|
+
|
10
|
+
# guest:guest has full access to /amq_client_testbed
|
11
|
+
# amq_client_gem:amq_client_gem has full access to /amq_client_testbed
|
12
|
+
|
13
|
+
rabbitmqctl delete_vhost "/amq_client_testbed"
|
14
|
+
rabbitmqctl add_vhost "/amq_client_testbed"
|
15
|
+
rabbitmqctl delete_user amq_client_gem
|
16
|
+
rabbitmqctl add_user amq_client_gem amq_client_gem_password
|
17
|
+
rabbitmqctl set_permissions -p /amq_client_testbed guest ".*" ".*" ".*"
|
18
|
+
rabbitmqctl set_permissions -p /amq_client_testbed amq_client_gem ".*" ".*" ".*"
|
19
|
+
|
20
|
+
|
21
|
+
# amqp_gem_reader:reader_password has read access to /amq_client_testbed
|
22
|
+
|
23
|
+
rabbitmqctl add_user amq_client_gem_reader reader_password
|
24
|
+
rabbitmqctl set_permissions -p /amq_client_testbed amq_client_gem_reader "^---$" "^---$" ".*"
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__dir = File.dirname(File.expand_path(__FILE__))
|
5
|
+
require File.join(__dir, "example_helper")
|
6
|
+
|
7
|
+
amq_client_example "Set a queue up for message delivery" do |client|
|
8
|
+
channel = AMQ::Client::Channel.new(client, 1)
|
9
|
+
channel.open do
|
10
|
+
puts "Channel #{channel.id} is now open!"
|
11
|
+
end
|
12
|
+
|
13
|
+
queue = AMQ::Client::Queue.new(client, channel)
|
14
|
+
queue.declare(false, false, false, true) do
|
15
|
+
puts "Server-named, auto-deletable Queue #{queue.name.inspect} is ready"
|
16
|
+
end
|
17
|
+
|
18
|
+
queue.bind("amq.fanout") do
|
19
|
+
puts "Queue #{queue.name} is now bound to amq.fanout"
|
20
|
+
end
|
21
|
+
|
22
|
+
queue.consume(true) do |consumer_tag|
|
23
|
+
puts "Subscribed for messages routed to #{queue.name}, consumer tag is #{consumer_tag}, using no-ack mode"
|
24
|
+
puts
|
25
|
+
|
26
|
+
queue.on_delivery do |header, payload, consumer_tag, delivery_tag, redelivered, exchange, routing_key|
|
27
|
+
puts "Got a delivery:"
|
28
|
+
puts " Delivery tag: #{delivery_tag}"
|
29
|
+
puts " Header: #{header.inspect}"
|
30
|
+
puts " Payload: #{payload.inspect}"
|
31
|
+
end
|
32
|
+
|
33
|
+
exchange = AMQ::Client::Exchange.new(client, channel, "amq.fanout", :fanout)
|
34
|
+
100.times do |i|
|
35
|
+
exchange.publish("Message ##{i}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
show_stopper = Proc.new {
|
40
|
+
client.disconnect do
|
41
|
+
puts
|
42
|
+
puts "AMQP connection is now properly closed"
|
43
|
+
Coolio::Loop.default.stop
|
44
|
+
end
|
45
|
+
}
|
46
|
+
|
47
|
+
Signal.trap "INT", show_stopper
|
48
|
+
Signal.trap "TERM", show_stopper
|
49
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__dir = File.dirname(File.expand_path(__FILE__))
|
5
|
+
require File.join(__dir, "example_helper")
|
6
|
+
|
7
|
+
amq_client_example "Set a queue up for message delivery" do |client|
|
8
|
+
channel = AMQ::Client::Channel.new(client, 1)
|
9
|
+
channel.open do
|
10
|
+
puts "Channel #{channel.id} is now open!"
|
11
|
+
end
|
12
|
+
|
13
|
+
queue = AMQ::Client::Queue.new(client, channel)
|
14
|
+
queue.declare
|
15
|
+
|
16
|
+
queue.bind("amq.fanout") do
|
17
|
+
puts "Queue #{queue.name} is now bound to amq.fanout"
|
18
|
+
end
|
19
|
+
|
20
|
+
queue.consume do |consumer_tag|
|
21
|
+
queue.on_delivery do |header, payload, consumer_tag, delivery_tag, redelivered, exchange, routing_key|
|
22
|
+
puts "Got a delivery: #{payload} (delivery tag: #{delivery_tag}), ack-ing..."
|
23
|
+
|
24
|
+
queue.acknowledge(delivery_tag)
|
25
|
+
end
|
26
|
+
|
27
|
+
exchange = AMQ::Client::Exchange.new(client, channel, "amq.fanout", :fanout)
|
28
|
+
10.times do |i|
|
29
|
+
exchange.publish("Message ##{i}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
show_stopper = Proc.new {
|
34
|
+
client.disconnect do
|
35
|
+
puts
|
36
|
+
puts "AMQP connection is now properly closed"
|
37
|
+
Coolio::Loop.default.stop
|
38
|
+
end
|
39
|
+
}
|
40
|
+
|
41
|
+
Signal.trap "INT", show_stopper
|
42
|
+
Signal.trap "TERM", show_stopper
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__dir = File.dirname(File.expand_path(__FILE__))
|
5
|
+
require File.join(__dir, "example_helper")
|
6
|
+
|
7
|
+
amq_client_example "Set a queue up for message delivery" do |client|
|
8
|
+
channel = AMQ::Client::Channel.new(client, 1)
|
9
|
+
channel.open do
|
10
|
+
puts "Channel #{channel.id} is now open!"
|
11
|
+
end
|
12
|
+
|
13
|
+
queue = AMQ::Client::Queue.new(client, channel)
|
14
|
+
queue.declare
|
15
|
+
|
16
|
+
queue.bind("amq.fanout") do
|
17
|
+
puts "Queue #{queue.name} is now bound to amq.fanout"
|
18
|
+
end
|
19
|
+
|
20
|
+
queue.consume do |consumer_tag|
|
21
|
+
queue.on_delivery do |header, payload, consumer_tag, delivery_tag, redelivered, exchange, routing_key|
|
22
|
+
puts "Got a delivery: #{payload} (delivery tag: #{delivery_tag}), rejecting..."
|
23
|
+
|
24
|
+
queue.reject(delivery_tag, false)
|
25
|
+
end
|
26
|
+
|
27
|
+
exchange = AMQ::Client::Exchange.new(client, channel, "amq.fanout", :fanout)
|
28
|
+
10.times do |i|
|
29
|
+
exchange.publish("Message ##{i}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
show_stopper = Proc.new {
|
34
|
+
client.disconnect do
|
35
|
+
puts
|
36
|
+
puts "AMQP connection is now properly closed"
|
37
|
+
Coolio::Loop.default.stop
|
38
|
+
end
|
39
|
+
}
|
40
|
+
|
41
|
+
Signal.trap "INT", show_stopper
|
42
|
+
Signal.trap "TERM", show_stopper
|
43
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__dir = File.dirname(File.expand_path(__FILE__))
|
5
|
+
require File.join(__dir, "example_helper")
|
6
|
+
|
7
|
+
amq_client_example "Publish 100 messages using basic.publish" do |client|
|
8
|
+
puts "AMQP connection is open: #{client.connection.server_properties.inspect}"
|
9
|
+
|
10
|
+
channel = AMQ::Client::Channel.new(client, 1)
|
11
|
+
channel.open do
|
12
|
+
puts "Channel #{channel.id} is now open!"
|
13
|
+
end
|
14
|
+
|
15
|
+
exchange = AMQ::Client::Exchange.new(client, channel, "amqclient.adapters.em.exchange1", :fanout)
|
16
|
+
exchange.declare do
|
17
|
+
100.times do
|
18
|
+
# exchange.publish("à bientôt!")
|
19
|
+
exchange.publish("See you soon!")
|
20
|
+
end
|
21
|
+
|
22
|
+
$stdout.flush
|
23
|
+
end
|
24
|
+
|
25
|
+
show_stopper = Proc.new {
|
26
|
+
client.disconnect do
|
27
|
+
puts
|
28
|
+
puts "AMQP connection is now properly closed"
|
29
|
+
Coolio::Loop.default.stop
|
30
|
+
end
|
31
|
+
}
|
32
|
+
|
33
|
+
Signal.trap "INT", show_stopper
|
34
|
+
Signal.trap "TERM", show_stopper
|
35
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__dir = File.dirname(File.expand_path(__FILE__))
|
5
|
+
require File.join(__dir, "example_helper")
|
6
|
+
|
7
|
+
amq_client_example "Open and then close AMQ channel" do |client|
|
8
|
+
puts "AMQP connection is open: #{client.connection.server_properties.inspect}"
|
9
|
+
|
10
|
+
channel = AMQ::Client::Channel.new(client, 1)
|
11
|
+
channel.open do
|
12
|
+
puts "Channel #{channel.id} is now open!"
|
13
|
+
puts "Lets close it."
|
14
|
+
channel.close do
|
15
|
+
puts "Closed channel ##{channel.id}"
|
16
|
+
puts
|
17
|
+
client.disconnect do
|
18
|
+
puts
|
19
|
+
puts "AMQP connection is now properly closed"
|
20
|
+
Coolio::Loop.default.stop
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|