From bd1363c17abf9686a6104fac7d62df3b044f87e9 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Mon, 29 Mar 2010 15:25:57 +0400 Subject: [PATCH] Make stomp queue manager work with basic servers Signed-off-by: Eugene Crosser --- README | 6 ++++++ lib/stompqueuemanager.php | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/README b/README index c687cb240a..757cd7579e 100644 --- a/README +++ b/README @@ -970,6 +970,12 @@ max_retries: for stomp, drop messages after N failed attempts to process. dead_letter_dir: for stomp, optional directory to dump data on failed queue processing events after discarding them. +stomp_no_transactions: for stomp, the server does not support transactions, + so do not try to user them. This is needed for http://www.morbidq.com/. + +stomp_no_acks: for stomp, the server does not support acknowledgements. + so do not try to user them. This is needed for http://www.morbidq.com/. + license ------- diff --git a/lib/stompqueuemanager.php b/lib/stompqueuemanager.php index 9af8b2f482..4d9f39791d 100644 --- a/lib/stompqueuemanager.php +++ b/lib/stompqueuemanager.php @@ -39,7 +39,8 @@ class StompQueueManager extends QueueManager protected $base; protected $control; - protected $useTransactions = true; + protected $useTransactions; + protected $useAcks; protected $sites = array(); protected $subscriptions = array(); @@ -64,6 +65,8 @@ class StompQueueManager extends QueueManager $this->base = common_config('queue', 'queue_basename'); $this->control = common_config('queue', 'control_channel'); $this->breakout = common_config('queue', 'breakout'); + $this->useTransactions = !common_config('queue', 'stomp_no_transactions'); + $this->useAcks = !common_config('queue', 'stomp_no_acks'); } /** @@ -703,13 +706,15 @@ class StompQueueManager extends QueueManager protected function ack($idx, $frame) { - if ($this->useTransactions) { - if (empty($this->transaction[$idx])) { - throw new Exception("Tried to ack but not in a transaction"); + if ($this->useAcks) { + if ($this->useTransactions) { + if (empty($this->transaction[$idx])) { + throw new Exception("Tried to ack but not in a transaction"); + } + $this->cons[$idx]->ack($frame, $this->transaction[$idx]); + } else { + $this->cons[$idx]->ack($frame); } - $this->cons[$idx]->ack($frame, $this->transaction[$idx]); - } else { - $this->cons[$idx]->ack($frame); } } -- 2.39.5