Class: Qusion::ChannelPool
- Inherits:
-
Object
- Object
- Qusion::ChannelPool
- Includes:
- Singleton
- Defined in:
- lib/qusion/channel_pool.rb
Overview
ChannelPool maintains a pool of AMQP channel objects that can be reused. The motivation behind this is that if you were to use MQ.new to create a new channel for every request, your AMQP broker could be swamped trying to maintain a bunch of channels that you’re only using once.
To use the channel pool, just replace MQ.new
in your code with Qusion.channel
# Instead of this:
MQ.new.queue("my-worker-queue")
# Do this:
Qusion.channel.queue("my-worker-queue")
By default, ChannelPool maintains a pool of 5 channels. This can be adjusted with ChannelPool.pool_size=()
or Qusion.channel_pool_size()
The optimal pool size is not yet known, but I suspect you might need a larger value if using Thin in production, and a smaller value otherwise.
Instance Attribute Summary collapse
-
#pool ⇒ Object
readonly
Returns the value of attribute pool.
Class Method Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#pool ⇒ Object (readonly)
Returns the value of attribute pool.
43 44 45 |
# File 'lib/qusion/channel_pool.rb', line 43 def pool @pool end |
Class Method Details
.pool_size ⇒ Object
32 33 34 |
# File 'lib/qusion/channel_pool.rb', line 32 def pool_size @pool_size ||= 5 end |
.pool_size=(new_pool_size) ⇒ Object
27 28 29 30 |
# File 'lib/qusion/channel_pool.rb', line 27 def pool_size=(new_pool_size) reset @pool_size = new_pool_size end |
.reset ⇒ Object
36 37 38 39 |
# File 'lib/qusion/channel_pool.rb', line 36 def reset @pool_size = nil instance.reset end |
Instance Method Details
#channel ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/qusion/channel_pool.rb', line 45 def channel @i ||= 1 @i = (@i + 1) % pool_size channel = pool[@i] if not channel.open? pool[@i] = channel = AMQP::Channel.new else channel.reset end channel end |
#pool_size ⇒ Object
65 66 67 |
# File 'lib/qusion/channel_pool.rb', line 65 def pool_size self.class.pool_size end |
#reset ⇒ Object
61 62 63 |
# File 'lib/qusion/channel_pool.rb', line 61 def reset @pool = nil end |