lib/amqp.rb in amqp-0.5.9 vs lib/amqp.rb in amqp-0.6.0
- old
+ new
@@ -12,11 +12,12 @@
end
class << self
@logging = false
attr_accessor :logging
- attr_reader :conn
+ attr_reader :conn, :closing
+ alias :closing? :closing
alias :connection :conn
end
def self.connect *args
Client.connect *args
@@ -39,26 +40,63 @@
# logging
:logging => false
}
end
- def self.start *args
- @conn ||= connect *args
+ # Must be called to startup the connection to the AMQP server.
+ #
+ # The method takes several arguments and an optional block.
+ #
+ # This takes any option that is also accepted by EventMachine::connect.
+ # Additionally, there are several AMQP-specific options.
+ #
+ # * :user => String (default 'guest')
+ # The username as defined by the AMQP server.
+ # * :pass => String (default 'guest')
+ # The password for the associated :user as defined by the AMQP server.
+ # * :vhost => String (default '/')
+ # The virtual host as defined by the AMQP server.
+ # * :timeout => Numeric (default nil)
+ # Measured in seconds.
+ # * :logging => true | false (default false)
+ # Toggle the extremely verbose logging of all protocol communications
+ # between the client and the server. Extremely useful for debugging.
+ #
+ # AMQP.start do
+ # # default is to connect to localhost:5672
+ #
+ # # define queues, exchanges and bindings here.
+ # # also define all subscriptions and/or publishers
+ # # here.
+ #
+ # # this block never exits unless EM.stop_event_loop
+ # # is called.
+ # end
+ #
+ # Most code will use the MQ api. Any calls to MQ.direct / MQ.fanout /
+ # MQ.topic / MQ.queue will implicitly call #start. In those cases,
+ # it is sufficient to put your code inside of an EventMachine.run
+ # block. See the code examples in MQ for details.
+ #
+ def self.start *args, &blk
+ EM.run{
+ @conn ||= connect *args
+ @conn.callback(&blk) if blk
+ @conn
+ }
end
+
+ class << self
+ alias :run :start
+ end
def self.stop
- if @conn
+ if @conn and not @closing
+ @closing = true
@conn.close{
yield if block_given?
@conn = nil
+ @closing = false
}
end
end
-
- def self.run *args
- EM.run{
- AMQP.start(*args).callback{
- yield
- }
- }
- end
-end
\ No newline at end of file
+end