public void run() {
			while (true) {
				try {
					logger.debug("Waiting for new message");
					permits.acquire();
					Message msg = queue.peek();
					if (msg == null) {
						// May be a new subscriber was added
						continue;
					}
					if (msg == poison) {
						logger.info("Received close signal, closing queue:"
								+ name);
						break;
					}
					if (!msg.hasExpired() && !subscribers.isEmpty()) {
						AsyncMessageConsumer subscriber = subscribers.get(0);
						subscriber.onMessage(msg.clone());
						logger.debug("Message sent to a client");
						queue.remove(msg);
					}
				} catch (InterruptedException e) {
					logger.debug("Interrupted exception");
					Thread.currentThread().interrupt();
					break;
				}
			}

		}