Class | AMQP::Utilities::EventLoopHelper
In: | lib/amqp/utilities/event_loop_helper.rb
Parent: | Object

A helper that starts EventMachine reactor the optimal way depending on what Web server (if any) you are running. It should not be considered a 100% safe, general purpose EventMachine reactor "on/off switch" but is very useful in Web applications and some stand-alone applications.

This helper was inspired by Qusion project by Dan DeLeo.

h2. Key methods

- {EventLoopHelper.run}
- {EventLoopHelper.server_type}

### Methods

eventmachine_thread reactor_running? run server_type

### Public Class methods

eventmachine_thread()
reactor_running?()
run(&block)

A helper that detects what app server (if any) is running and starts EventMachine reactor in the most optimal way. For event-driven servers like Thin and Goliath, this means relying on them starting the reactor but delaying execution of a block you pass to {EventLoopHelper.run} until reactor is actually running.

For Unicorn, Passenger, Mongrel and other servers and standalone apps EventMachine is started in a separate thread.

@example Using EventLoopHelper.run to start EventMachine reactor the optimal way without blocking current thread

      AMQP::Utilities::EventLoopHelper.run do
        # Sets up default connection, accessible via AMQP.connection, and opens a channel
        # accessible via AMQP.channel for convenience
        AMQP.start

        exchange          = AMQP.channel.fanout("amq.fanout")

        AMQP.channel.queue("", :auto_delete => true, :exclusive => true).bind(exchange)
        AMQP::channel.default_exchange.publish("Started!", :routing_key => AMQP::State.queue.name)
      end

@return [Thread] A thread EventMachine event loop will be started in (there is no guarantee it is already running).

@note This method, unlike EventMachine.run, DOES NOT block current thread.

server_type()

Type of server (if any) that is running.

@see AMQP::Utilities::ServerType.detect

[Validate]