right_amqp 0.6.1 → 0.7.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.
@@ -334,6 +334,38 @@ module RightAMQP
334
334
  end
335
335
  end
336
336
 
337
+ # Check status of specified queues
338
+ # Silently ignore unknown queues
339
+ # If a queue whose status is being checked does not exist in the broker,
340
+ # this broker connection will fail and become unusable
341
+ #
342
+ # === Parameters
343
+ # queue_names(Array):: Names of queues previously subscribed to
344
+ #
345
+ # === Block
346
+ # Optional block to be called each time that status for a queue is retrieved with
347
+ # parameters queue name, message count, and consumer count; the counts are nil
348
+ # if there was a failure while trying to retrieve them; the block is not called
349
+ # for queues to which this client is not currently subscribed
350
+ #
351
+ # === Return
352
+ # (Boolean):: true if connected, otherwise false, in which case block never gets called
353
+ def queue_status(queue_names, &block)
354
+ return false unless connected?
355
+ @queues.each do |q|
356
+ if queue_names.include?(q.name)
357
+ begin
358
+ q.status { |messages, consumers| block.call(q.name, messages, consumers) if block }
359
+ rescue Exception => e
360
+ logger.exception("Failed checking status of queue #{q.name} on broker #{@alias}", e, :trace)
361
+ @exception_stats.track("queue_status", e)
362
+ block.call(q.name, nil, nil) if block
363
+ end
364
+ end
365
+ end
366
+ true
367
+ end
368
+
337
369
  # Publish message to AMQP exchange
338
370
  #
339
371
  # === Parameters
@@ -352,7 +352,7 @@ module RightAMQP
352
352
  # === Return
353
353
  # (Array):: Serialized identity of usable brokers
354
354
  def usable
355
- each_usable.map { |b| b.identity }
355
+ each(:usable).map { |b| b.identity }
356
356
  end
357
357
 
358
358
  # Get serialized identity of unusable brokers
@@ -490,9 +490,9 @@ module RightAMQP
490
490
  def subscribe(queue, exchange = nil, options = {}, &blk)
491
491
  identities = []
492
492
  brokers = options.delete(:brokers)
493
- each_usable(brokers) { |b| identities << b.identity if b.subscribe(queue, exchange, options, &blk) }
493
+ each(:usable, brokers) { |b| identities << b.identity if b.subscribe(queue, exchange, options, &blk) }
494
494
  logger.info("Could not subscribe to queue #{queue.inspect} on exchange #{exchange.inspect} " +
495
- "on brokers #{each_usable(brokers).inspect} when selected #{brokers.inspect} " +
495
+ "on brokers #{each(:usable, brokers).inspect} when selected #{brokers.inspect} " +
496
496
  "from usable #{usable.inspect}") if identities.empty?
497
497
  identities
498
498
  end
@@ -510,7 +510,7 @@ module RightAMQP
510
510
  # === Return
511
511
  # true:: Always return true
512
512
  def unsubscribe(queue_names, timeout = nil, &blk)
513
- count = each_usable.inject(0) do |c, b|
513
+ count = each(:usable).inject(0) do |c, b|
514
514
  c + b.queues.inject(0) { |c, q| c + (queue_names.include?(q.name) ? 1 : 0) }
515
515
  end
516
516
  if count == 0
@@ -518,7 +518,7 @@ module RightAMQP
518
518
  else
519
519
  handler = CountedDeferrable.new(count, timeout)
520
520
  handler.callback { blk.call if blk }
521
- each_usable { |b| b.unsubscribe(queue_names) { handler.completed_one } }
521
+ each(:usable) { |b| b.unsubscribe(queue_names) { handler.completed_one } }
522
522
  end
523
523
  true
524
524
  end
@@ -536,12 +536,51 @@ module RightAMQP
536
536
  def declare(type, name, options = {})
537
537
  identities = []
538
538
  brokers = options.delete(:brokers)
539
- each_usable(brokers) { |b| identities << b.identity if b.declare(type, name, options) }
540
- logger.info("Could not declare #{type.to_s} #{name.inspect} on brokers #{each_usable(brokers).inspect} " +
539
+ each(:usable, brokers) { |b| identities << b.identity if b.declare(type, name, options) }
540
+ logger.info("Could not declare #{type.to_s} #{name.inspect} on brokers #{each(:usable, brokers).inspect} " +
541
541
  "when selected #{brokers.inspect} from usable #{usable.inspect}") if identities.empty?
542
542
  identities
543
543
  end
544
544
 
545
+ # Check status of specified queues for connected brokers
546
+ # Silently ignore unknown queues
547
+ # If a queue whose status is being checked does not exist,
548
+ # the associated broker connection will fail and be unusable
549
+ #
550
+ # === Parameters
551
+ # queue_names(Array):: Names of queues previously subscribed to that are to be checked
552
+ # timeout(Integer):: Number of seconds to wait for all status checks, defaults to no timeout
553
+ #
554
+ # === Block
555
+ # Optional block to be called after all queue statuses are obtained with hash parameter
556
+ # containing statuses with queue name as key and value that is a hash with broker identity
557
+ # as key and hash of :messages and :consumers as value; the :messages and :consumers
558
+ # values are nil if there is a failure retrieving them for the given queue
559
+ #
560
+ # === Return
561
+ # true:: Always return true
562
+ def queue_status(queue_names, timeout = nil, &blk)
563
+ count = 0
564
+ status = {}
565
+ each(:connected) { |b| b.queues.each { |q| count += 1 if queue_names.include?(q.name) } }
566
+ if count == 0
567
+ blk.call(status) if blk
568
+ else
569
+ handler = CountedDeferrable.new(count, timeout)
570
+ handler.callback { blk.call(status) if blk }
571
+ each(:connected) do |b|
572
+ if b.queue_status(queue_names) do |name, messages, consumers|
573
+ (status[name] ||= {})[b.identity] = {:messages => messages, :consumers => consumers}
574
+ handler.completed_one
575
+ end
576
+ else
577
+ b.queues.each { |q| handler.completed_one if queue_names.include?(q.name) }
578
+ end
579
+ end
580
+ end
581
+ true
582
+ end
583
+
545
584
  # Publish message to AMQP exchange of first connected broker
546
585
  #
547
586
  # === Parameters
@@ -559,7 +598,7 @@ module RightAMQP
559
598
  # :immediate(Boolean):: Return message for the same reasons as :mandatory plus if all
560
599
  # of the queues associated with the exchange are not immediately ready to consume the message
561
600
  # :fanout(Boolean):: true means publish to all connected brokers
562
- # :brokers(Array):: Identity of brokers selected for use, defaults to all home brokers
601
+ # :brokers(Array):: Identity of brokers selected for use, defaults to all brokers
563
602
  # if nil or empty
564
603
  # :order(Symbol):: Broker selection order: :random or :priority,
565
604
  # defaults to @select if :brokers is nil, otherwise defaults to :priority
@@ -881,25 +920,26 @@ module RightAMQP
881
920
  bytes.unpack('H*')[0]
882
921
  end
883
922
 
884
- # Iterate over clients that are usable, i.e., connecting or confirmed connected
923
+ # Iterate over clients that have the specified status
885
924
  #
886
925
  # === Parameters
926
+ # status(String):: Status for selecting: :usable, :connected, :failed
887
927
  # identities(Array):: Identity of brokers to be considered, nil or empty array means all brokers
888
928
  #
889
929
  # === Block
890
- # Optional block with following parameters to be called for each usable broker client
930
+ # Optional block with following parameters to be called for each broker client selected
891
931
  # broker(BrokerClient):: Broker client
892
932
  #
893
933
  # === Return
894
- # (Array):: Usable broker clients
895
- def each_usable(identities = nil)
934
+ # (Array):: Selected broker clients
935
+ def each(status, identities = nil)
896
936
  choices = if identities && !identities.empty?
897
- choices = identities.inject([]) { |c, i| if b = @brokers_hash[i] then c << b else c end }
937
+ identities.inject([]) { |c, i| if b = @brokers_hash[i] then c << b else c end }
898
938
  else
899
939
  @brokers
900
940
  end
901
941
  choices.select do |b|
902
- if b.usable?
942
+ if b.send("#{status}?".to_sym)
903
943
  yield(b) if block_given?
904
944
  true
905
945
  end
@@ -910,7 +950,7 @@ module RightAMQP
910
950
  #
911
951
  # === Parameters
912
952
  # options(Hash):: Selection options:
913
- # :brokers(Array):: Identity of brokers selected for use, defaults to all home brokers if nil or empty
953
+ # :brokers(Array):: Identity of brokers selected for use, defaults to all brokers if nil or empty
914
954
  # :order(Symbol):: Broker selection order: :random or :priority,
915
955
  # defaults to @select if :brokers is nil, otherwise defaults to :priority
916
956
  #
@@ -968,18 +1008,18 @@ module RightAMQP
968
1008
  update = if v[:boundary] == :all
969
1009
  if b.size < n && a.size == n
970
1010
  :connected
971
- elsif b.size == n && a.size < n
972
- :disconnected
973
1011
  elsif (f - failed).empty?
974
1012
  :failed
1013
+ elsif b.size == n && a.size < n
1014
+ :disconnected
975
1015
  end
976
1016
  else
977
1017
  if b.size == 0 && a.size > 0
978
1018
  :connected
979
- elsif b.size > 0 && a.size == 0
980
- :disconnected
981
1019
  elsif (f - failed).empty?
982
1020
  :failed
1021
+ elsif b.size > 0 && a.size == 0
1022
+ :disconnected
983
1023
  end
984
1024
  end
985
1025
  if update
data/right_amqp.gemspec CHANGED
@@ -24,8 +24,8 @@ require 'rubygems'
24
24
 
25
25
  Gem::Specification.new do |spec|
26
26
  spec.name = 'right_amqp'
27
- spec.version = '0.6.1'
28
- spec.date = '2013-07-23'
27
+ spec.version = '0.7.0'
28
+ spec.date = '2013-08-04'
29
29
  spec.authors = ['Lee Kirchhoff']
30
30
  spec.email = 'lee@rightscale.com'
31
31
  spec.homepage = 'https://github.com/rightscale/right_amqp'
@@ -577,6 +577,58 @@ describe RightAMQP::BrokerClient do
577
577
 
578
578
  end # when declaring
579
579
 
580
+ context "when checking status" do
581
+
582
+ before(:each) do
583
+ @direct = flexmock("direct")
584
+ @bind = flexmock("bind", :subscribe => true)
585
+ @queue = flexmock("queue", :bind => @bind, :name => "queue1")
586
+ @channel.should_receive(:queue).and_return(@queue).by_default
587
+ @channel.should_receive(:direct).and_return(@direct).by_default
588
+ flexmock(MQ).should_receive(:new).with(@connection).and_return(@channel).by_default
589
+ @broker = RightAMQP::BrokerClient.new(@identity, @address, @serializer, @exceptions, @non_deliveries, @options)
590
+ @broker.subscribe({:name => "queue1"}, {:type => :direct, :name => "exchange"}) {|_, _|}
591
+ @broker.send(:update_status, :ready)
592
+ end
593
+
594
+ it "should return false if client not connected" do
595
+ @broker.send(:update_status, :disconnected)
596
+ @broker.queue_status(["queue1"]).should be_false
597
+ end
598
+
599
+ it "should request the status of each queue and pass it to the supplied block" do
600
+ @queue.should_receive(:status).and_yield(1, 2).once
601
+ called = 0
602
+ @broker.queue_status(["queue1"]) do |name, messages, consumers|
603
+ name.should == "queue1"
604
+ messages.should == 1
605
+ consumers.should == 2
606
+ called += 1
607
+ end.should be_true
608
+ called.should == 1
609
+ end
610
+
611
+ it "should not require a block" do
612
+ @queue.should_receive(:status).once
613
+ @broker.queue_status(["queue1"]).should be_true
614
+ end
615
+
616
+ it "should log unexpected exceptions and call block with nil status" do
617
+ @logger.should_receive(:error).with(/Failed checking status of queue/).once
618
+ @exceptions.should_receive(:track).once
619
+ @queue.should_receive(:status).and_raise(Exception).once
620
+ called = 0
621
+ @broker.queue_status(["queue1"]) do |name, messages, consumers|
622
+ name.should == "queue1"
623
+ messages.should be_nil
624
+ consumers.should be_nil
625
+ called += 1
626
+ end.should be_true
627
+ called.should == 1
628
+ end
629
+
630
+ end # when checking status
631
+
580
632
  context "when publishing" do
581
633
 
582
634
  before(:each) do
@@ -20,6 +20,8 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
 
23
+ require 'json'
24
+
23
25
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
24
26
  require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'right_amqp'))
25
27
 
@@ -679,6 +681,59 @@ describe RightAMQP::HABrokerClient do
679
681
 
680
682
  end # declaring
681
683
 
684
+ context "checking status" do
685
+
686
+ before(:each) do
687
+ @timeout = 10
688
+ @timer = flexmock("timer", :cancel => true).by_default
689
+ flexmock(EM::Timer).should_receive(:new).with(@timeout, Proc).and_return(@timer).by_default
690
+ @queue_name = "my_queue"
691
+ @queue = flexmock("queue", :name => @queue_name)
692
+ @queues = [@queue]
693
+ @broker1.should_receive(:queues).and_return(@queues).by_default
694
+ @broker1.should_receive(:connected?).and_return(true).by_default
695
+ @broker1.should_receive(:queue_status).and_return(true).by_default
696
+ @broker2.should_receive(:queues).and_return(@queues).by_default
697
+ @broker2.should_receive(:connected?).and_return(true).by_default
698
+ @broker2.should_receive(:queue_status).and_return(true).by_default
699
+ @ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second")
700
+ end
701
+
702
+ it "should not check status if there are no queues" do
703
+ @ha.queue_status([]).should be_true
704
+ end
705
+
706
+ it "should make block call with empty status if there are no queues" do
707
+ called = 0
708
+ @ha.queue_status(["my_other_queue"], @timeout) { |status| status.should == {}; called += 1 }.should be_true
709
+ called.should == 1
710
+ end
711
+
712
+ it "should wait to make callback until the status of all queues is obtained" do
713
+ @broker1.should_receive(:queue_status).with([@queue_name], Proc).and_return(true).and_yield(@queue_name, 0, 1).once
714
+ @broker2.should_receive(:queue_status).with([@queue_name], Proc).and_return(true).and_yield(@queue_name, 1, 2).once
715
+ called = 0
716
+ @ha.queue_status([@queue_name], @timeout) do |status|
717
+ status.should == {@queue_name => {@broker1.identity => {:messages => 0, :consumers => 1},
718
+ @broker2.identity => {:messages => 1, :consumers => 2}}}
719
+ called += 1
720
+ end.should be_true
721
+ called.should == 1
722
+ end
723
+
724
+ it "should account for queues for which status cannot be obtained" do
725
+ called = 0
726
+ @broker1.should_receive(:queue_status).with([@queue_name], Proc).and_return(false).once
727
+ @broker2.should_receive(:queue_status).with([@queue_name], Proc).and_return(true).and_yield(@queue_name, 1, 2).once
728
+ @ha.queue_status([@queue_name], @timeout) do |status|
729
+ status.should == {@queue_name => {@broker2.identity => {:messages => 1, :consumers => 2}}}
730
+ called += 1
731
+ end.should be_true
732
+ called.should == 1
733
+ end
734
+
735
+ end # checking status
736
+
682
737
  context "publishing" do
683
738
 
684
739
  before(:each) do
@@ -987,24 +1042,39 @@ describe RightAMQP::HABrokerClient do
987
1042
  @broker3.should_receive(:failed?).and_return(false).by_default
988
1043
  end
989
1044
 
990
- it "should give access to or list usable brokers" do
991
- ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second, third")
992
- aliases = []
993
- res = ha.__send__(:each_usable) { |b| aliases << b.alias }
994
- aliases.should == ["b0", "b1", "b2"]
995
- res.size.should == 3
996
- res[0].alias.should == "b0"
997
- res[1].alias.should == "b1"
998
- res[2].alias.should == "b2"
1045
+ [:usable, :connected].each do |status|
1046
+ status_query = "#{status}?".to_sym
999
1047
 
1000
- @broker1.should_receive(:usable?).and_return(true)
1001
- @broker2.should_receive(:usable?).and_return(false)
1002
- @broker3.should_receive(:usable?).and_return(false)
1003
- aliases = []
1004
- res = ha.__send__(:each_usable) { |b| aliases << b.alias }
1005
- aliases.should == ["b0"]
1006
- res.size.should == 1
1007
- res[0].alias.should == "b0"
1048
+ it "should give access to or list #{status} brokers" do
1049
+ ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second, third")
1050
+ aliases = []
1051
+ res = ha.__send__(:each, status) { |b| aliases << b.alias }
1052
+ aliases.should == ["b0", "b1", "b2"]
1053
+ res.size.should == 3
1054
+ res[0].alias.should == "b0"
1055
+ res[1].alias.should == "b1"
1056
+ res[2].alias.should == "b2"
1057
+
1058
+ @broker1.should_receive(status_query).and_return(true)
1059
+ @broker2.should_receive(status_query).and_return(false)
1060
+ @broker3.should_receive(status_query).and_return(false)
1061
+ aliases = []
1062
+ res = ha.__send__(:each, status) { |b| aliases << b.alias }
1063
+ aliases.should == ["b0"]
1064
+ res.size.should == 1
1065
+ res[0].alias.should == "b0"
1066
+ end
1067
+
1068
+ it "should give access to each selected #{status} broker" do
1069
+ ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second, third")
1070
+ @broker2.should_receive(status_query).and_return(true)
1071
+ @broker3.should_receive(status_query).and_return(false)
1072
+ aliases = []
1073
+ res = ha.__send__(:each, status, [@identity2, @identity3]) { |b| aliases << b.alias }
1074
+ aliases.should == ["b1"]
1075
+ res.size.should == 1
1076
+ res[0].alias.should == "b1"
1077
+ end
1008
1078
  end
1009
1079
 
1010
1080
  it "should give list of unusable brokers" do
@@ -1015,17 +1085,6 @@ describe RightAMQP::HABrokerClient do
1015
1085
  ha.unusable.should == [@identity2, @identity3]
1016
1086
  end
1017
1087
 
1018
- it "should give access to each selected usable broker" do
1019
- ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second, third")
1020
- @broker2.should_receive(:usable?).and_return(true)
1021
- @broker3.should_receive(:usable?).and_return(false)
1022
- aliases = []
1023
- res = ha.__send__(:each_usable, [@identity2, @identity3]) { |b| aliases << b.alias }
1024
- aliases.should == ["b1"]
1025
- res.size.should == 1
1026
- res[0].alias.should == "b1"
1027
- end
1028
-
1029
1088
  it "should tell whether a broker is connected" do
1030
1089
  ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second, third")
1031
1090
  @broker2.should_receive(:connected?).and_return(false)
@@ -1233,11 +1292,68 @@ describe RightAMQP::HABrokerClient do
1233
1292
  ha.__send__(:update_status, @broker, false)
1234
1293
  @broker.should_receive(:status).and_return(:disconnected)
1235
1294
  @broker.should_receive(:connected?).and_return(false)
1295
+ @broker.should_receive(:failed?).and_return(false)
1236
1296
  ha.__send__(:update_status, @broker, true)
1237
1297
  called1.should == 1
1238
1298
  called2.should == 2
1239
1299
  end
1240
1300
 
1301
+ it "should provide failed connection status callback when all broker connections fail with :any option" do
1302
+ ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second")
1303
+ connected = disconnected = failed = 0
1304
+ ha.connection_status(:boundary => :any) do |status|
1305
+ if status == :connected
1306
+ connected += 1
1307
+ elsif status == :disconnected
1308
+ disconnected += 1
1309
+ elsif status == :failed
1310
+ (ha.brokers[0].failed? &&
1311
+ ha.brokers[1].failed?).should be_true
1312
+ failed += 1
1313
+ end
1314
+ end
1315
+ @broker2.should_receive(:failed?).and_return(true)
1316
+ @broker2.should_receive(:connected?).and_return(false)
1317
+ ha.__send__(:update_status, @broker2, true)
1318
+ connected.should == 0
1319
+ disconnected.should == 0
1320
+ failed.should == 0
1321
+ @broker1.should_receive(:failed?).and_return(true)
1322
+ @broker1.should_receive(:connected?).and_return(false)
1323
+ ha.__send__(:update_status, @broker1, true)
1324
+ connected.should == 0
1325
+ disconnected.should == 0
1326
+ failed.should == 1
1327
+ end
1328
+
1329
+ it "should provide failed connection status callback when all broker connections fail with :all option" do
1330
+ ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second")
1331
+ connected = disconnected = failed = 0
1332
+ ha.connection_status(:boundary => :all) do |status|
1333
+ if status == :connected
1334
+ connected += 1
1335
+ elsif status == :disconnected
1336
+ disconnected += 1
1337
+ elsif status == :failed
1338
+ (ha.brokers[0].failed? &&
1339
+ ha.brokers[1].failed?).should be_true
1340
+ failed += 1
1341
+ end
1342
+ end
1343
+ @broker2.should_receive(:failed?).and_return(true)
1344
+ @broker2.should_receive(:connected?).and_return(false)
1345
+ ha.__send__(:update_status, @broker2, true)
1346
+ connected.should == 0
1347
+ disconnected.should == 1
1348
+ failed.should == 0
1349
+ @broker1.should_receive(:failed?).and_return(true)
1350
+ @broker1.should_receive(:connected?).and_return(false)
1351
+ ha.__send__(:update_status, @broker1, true)
1352
+ connected.should == 0
1353
+ disconnected.should == 1
1354
+ failed.should == 1
1355
+ end
1356
+
1241
1357
  it "should provide failed connection status callback when all brokers fail to connect" do
1242
1358
  ha = RightAMQP::HABrokerClient.new(@serializer, :host => "first, second, third")
1243
1359
  connected = disconnected = failed = 0
metadata CHANGED
@@ -1,87 +1,70 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: right_amqp
3
- version: !ruby/object:Gem::Version
4
- hash: 5
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 6
9
- - 1
10
- version: 0.6.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Lee Kirchhoff
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-07-23 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
12
+ date: 2013-08-04 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: right_support
16
+ requirement: &2157007400 !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 11
28
- segments:
29
- - 1
30
- - 2
31
- version: "1.2"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.2'
32
22
  - - <
33
- - !ruby/object:Gem::Version
34
- hash: 7
35
- segments:
36
- - 3
37
- - 0
38
- version: "3.0"
39
- requirement: *id001
23
+ - !ruby/object:Gem::Version
24
+ version: '3.0'
40
25
  type: :runtime
41
- name: right_support
42
26
  prerelease: false
43
- - !ruby/object:Gem::Dependency
44
- version_requirements: &id002 !ruby/object:Gem::Requirement
27
+ version_requirements: *2157007400
28
+ - !ruby/object:Gem::Dependency
29
+ name: eventmachine
30
+ requirement: &2156993280 !ruby/object:Gem::Requirement
45
31
  none: false
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- hash: 59
50
- segments:
51
- - 0
52
- - 12
53
- - 10
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
54
35
  version: 0.12.10
55
36
  - - <
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 2
60
- - 0
61
- version: "2.0"
62
- requirement: *id002
37
+ - !ruby/object:Gem::Version
38
+ version: '2.0'
63
39
  type: :runtime
64
- name: eventmachine
65
40
  prerelease: false
66
- description: |
67
- RightAMQP provides a high availability client for interfacing with the
41
+ version_requirements: *2156993280
42
+ description: ! 'RightAMQP provides a high availability client for interfacing with
43
+ the
44
+
68
45
  RightScale RabbitMQ broker using the AMQP protocol. The AMQP version on which
46
+
69
47
  this gem is based is 0.6.7 but beyond that it contains a number of bug fixes and
48
+
70
49
  enhancements including reconnect, message return, heartbeat, and UTF-8 support.
50
+
71
51
  The high availability is achieved by maintaining multiple broker connections
52
+
72
53
  such that failed connections automatically reconnect and only connected
54
+
73
55
  brokers are used when routing a message. Although the HABrokerClient class
56
+
74
57
  is the intended primary means for accessing RabbitMQ services with this gem,
58
+
75
59
  alternatively the underlying AMQP services may be used directly.
76
60
 
61
+ '
77
62
  email: lee@rightscale.com
78
63
  executables: []
79
-
80
64
  extensions: []
81
-
82
- extra_rdoc_files:
65
+ extra_rdoc_files:
83
66
  - README.rdoc
84
- files:
67
+ files:
85
68
  - LICENSE
86
69
  - README.rdoc
87
70
  - Rakefile
@@ -112,44 +95,35 @@ files:
112
95
  - spec/ha_client/ha_broker_client_spec.rb
113
96
  - spec/spec.opts
114
97
  - spec/spec_helper.rb
115
- has_rdoc: true
116
98
  homepage: https://github.com/rightscale/right_amqp
117
99
  licenses: []
118
-
119
100
  post_install_message:
120
- rdoc_options:
101
+ rdoc_options:
121
102
  - --main
122
103
  - README.rdoc
123
104
  - --title
124
105
  - RightAMQP
125
- require_paths:
106
+ require_paths:
126
107
  - lib
127
- required_ruby_version: !ruby/object:Gem::Requirement
108
+ required_ruby_version: !ruby/object:Gem::Requirement
128
109
  none: false
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- hash: 57
133
- segments:
134
- - 1
135
- - 8
136
- - 7
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
137
113
  version: 1.8.7
138
- required_rubygems_version: !ruby/object:Gem::Requirement
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
115
  none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- hash: 3
144
- segments:
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ segments:
145
121
  - 0
146
- version: "0"
122
+ hash: -2424550966493205520
147
123
  requirements: []
148
-
149
124
  rubyforge_project:
150
- rubygems_version: 1.3.7
125
+ rubygems_version: 1.8.10
151
126
  signing_key:
152
127
  specification_version: 3
153
128
  summary: Client for interfacing to RightScale RabbitMQ broker using AMQP
154
129
  test_files: []
155
-