Package com.rabbitmq.client.impl
Class WorkPool<K,W>
- java.lang.Object
- 
- com.rabbitmq.client.impl.WorkPool<K,W>
 
- 
- Type Parameters:
- K- Key -- type of client
- W- Work -- type of work item
 
 public class WorkPool<K,W> extends Object This is a generic implementation of the channels specification in Channeling Work, Nov 2010 (channels.pdf). Objects of type K must be registered, with Each client has a state which is exactly one of dormant, in progress or ready. Immediately after registration a client is dormant. Items may be (singly) added to (the end of) a client's queue withregisterKey(K), and then they become clients and a queue of items (type W) is stored for each client.addWorkItem(Object, Object). If the client is dormant it becomes ready thereby. All other states remain unchanged. The next ready client, together with a collection of its items, may be retrieved withnextWorkBlock(collection,max)(making that client in progress). An in progress client can finish (processing a batch of items) withfinishWorkBlock(K). It then becomes either dormant or ready, depending if its queue of work items is empty or no. If a client has items queued, it is either in progress or ready but cannot be both. When work is finished it may be marked ready if there is further work, or dormant if there is not. There is never any work for a dormant client. A client may be unregistered, withunregisterKey(K), which removes the client from all parts of the state, and any queue of items stored with it. All clients may be unregistered withunregisterAllKeys().Concurrent SemanticsThis implementation is thread-safe.
- 
- 
Constructor SummaryConstructors Constructor Description WorkPool(int queueingTimeout)
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddWorkItem(K key, W item)Add (enqueue) an item for a specific client.booleanfinishWorkBlock(K key)Set client no longer in progress.voidlimit(K key)KnextWorkBlock(Collection<W> to, int size)Return the next ready client, and transfer a collection of that client's items to process.voidregisterKey(K key)Add clientkeyto pool of item queues, with an empty queue.voidunlimit(K key)voidunregisterAllKeys()Remove all clients from pool and from any other state.voidunregisterKey(K key)Remove client from pool and from any other state.
 
- 
- 
- 
Method Detail- 
registerKeypublic void registerKey(K key) Add clientkeyto pool of item queues, with an empty queue. A client is initially dormant. No-op ifkeyalready present.- Parameters:
- key- client to add to pool
 
 - 
limitpublic void limit(K key) 
 - 
unlimitpublic void unlimit(K key) 
 - 
unregisterKeypublic void unregisterKey(K key) Remove client from pool and from any other state. Has no effect if client already absent.- Parameters:
- key- of client to unregister
 
 - 
unregisterAllKeyspublic void unregisterAllKeys() Remove all clients from pool and from any other state.
 - 
nextWorkBlockpublic K nextWorkBlock(Collection<W> to, int size) Return the next ready client, and transfer a collection of that client's items to process. Mark client in progress. If there is no ready client, returnnull.- Parameters:
- to- collection object in which to transfer items
- size- max number of items to transfer
- Returns:
- key of client to whom items belong, or nullif there is none.
 
 - 
addWorkItempublic boolean addWorkItem(K key, W item) Add (enqueue) an item for a specific client. No change and returnsfalseif client not registered. If dormant, the client will be marked ready.- Parameters:
- key- the client to add to the work item to
- item- the work item to add to the client queue
- Returns:
- trueif and only if the client is marked ready — as a result of this work item
 
 - 
finishWorkBlockpublic boolean finishWorkBlock(K key) Set client no longer in progress. Ignore unknown clients (and returnfalse).- Parameters:
- key- client that has finished work
- Returns:
- trueif and only if client becomes ready
- Throws:
- IllegalStateException- if registered client not in progress
 
 
- 
 
-