diff options
author | Gordon Sim <gsim@apache.org> | 2007-07-24 14:27:31 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2007-07-24 14:27:31 +0000 |
commit | a6303894d7f9a24df4a691af3ce94647c033ebff (patch) | |
tree | 943b75df7528c9fbff6b3170c3c4b66758bf22ad /cpp/src/qpid/broker/BrokerQueue.cpp | |
parent | 9f120205e0d7a0b2666b9fd21a5296db07e32fd8 (diff) | |
download | qpid-python-a6303894d7f9a24df4a691af3ce94647c033ebff.tar.gz |
Initial support for latest approved 0-10 xml (with some transitional hacks included).
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@559059 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/BrokerQueue.cpp')
-rw-r--r-- | cpp/src/qpid/broker/BrokerQueue.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/BrokerQueue.cpp b/cpp/src/qpid/broker/BrokerQueue.cpp index cf6beff375..f8bffa01a3 100644 --- a/cpp/src/qpid/broker/BrokerQueue.cpp +++ b/cpp/src/qpid/broker/BrokerQueue.cpp @@ -56,8 +56,15 @@ Queue::Queue(const string& _name, bool _autodelete, Queue::~Queue(){} void Queue::deliver(Message::shared_ptr& msg){ - enqueue(0, msg); - process(msg); + if (msg->isImmediate() && getConsumerCount() == 0) { + if (alternateExchange) { + DeliverableMessage deliverable(msg); + alternateExchange->route(deliverable, msg->getRoutingKey(), &(msg->getApplicationHeaders())); + } + } else { + enqueue(0, msg); + process(msg); + } } void Queue::recover(Message::shared_ptr& msg){ @@ -255,6 +262,7 @@ void Queue::destroy() &(msg.getMessage().getApplicationHeaders())); pop(); } + alternateExchange->decAlternateUsers(); } if (store) { @@ -318,3 +326,8 @@ void Queue::setAlternateExchange(boost::shared_ptr<Exchange> exchange) { alternateExchange = exchange; } + +boost::shared_ptr<Exchange> Queue::getAlternateExchange() +{ + return alternateExchange; +} |