summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-04-11 15:17:46 +0100
committerSimon MacMullen <simon@rabbitmq.com>2012-04-11 15:17:46 +0100
commitcafc912795e31a78710fe8232bcf9bc7026cc574 (patch)
tree0280668cbea13cb9acaec0a0807c01cfa9ee0018
parent55547d6ec850825c11bbde1f0af769d60e54139b (diff)
downloadrabbitmq-server-git-cafc912795e31a78710fe8232bcf9bc7026cc574.tar.gz
Optimise routing for the default exchange.
-rw-r--r--src/rabbit_exchange.erl6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index 83e28c44a8..39fccec3d1 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -242,6 +242,12 @@ info_all(VHostPath) -> map(VHostPath, fun (X) -> info(X) end).
info_all(VHostPath, Items) -> map(VHostPath, fun (X) -> info(X, Items) end).
+%% Optimisation
+route(#exchange{name = #resource{name = <<"">>, virtual_host = VHost}},
+ #delivery{message = #basic_message{routing_keys = RKs}}) ->
+ QNames = [rabbit_misc:r(VHost, queue, RK) || RK <- RKs],
+ [QName || #amqqueue{name = QName} <- rabbit_amqqueue:lookup(QNames)];
+
route(X = #exchange{name = XName}, Delivery) ->
route1(Delivery, {queue:from_list([X]), XName, []}).