summaryrefslogtreecommitdiff
path: root/src/rabbit_exchange.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-08-13 13:16:45 +0100
committerSimon MacMullen <simon@rabbitmq.com>2014-08-13 13:16:45 +0100
commit830d91423e5e83675c459bc7cea1e445a6a554ce (patch)
tree369587d7e5e80b74f30d2b11ade4ae8318850c48 /src/rabbit_exchange.erl
parent7d0eabdf17b9073740c37b0aaeffb7b205f7b70b (diff)
downloadrabbitmq-server-git-830d91423e5e83675c459bc7cea1e445a6a554ce.tar.gz
Prototype of fast RPC replies.
Diffstat (limited to 'src/rabbit_exchange.erl')
-rw-r--r--src/rabbit_exchange.erl10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index a1772f0afd..94759cffef 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -347,11 +347,19 @@ route(#exchange{name = #resource{virtual_host = VHost, name = RName} = XName,
case {RName, rabbit_exchange_decorator:select(route, Decorators)} of
{<<"">>, []} ->
%% Optimisation
- [rabbit_misc:r(VHost, queue, RK) || RK <- lists:usort(RKs)];
+ %% TODO what if there are decorators? Is that even a sane case?
+ RKsSorted = lists:usort(RKs),
+ [rabbit_channel:deliver_fast_reply(RK, Delivery) ||
+ RK <- RKsSorted, fast_reply(RK)],
+ [rabbit_misc:r(VHost, queue, RK) || RK <- RKsSorted,
+ not fast_reply(RK)];
{_, SelectedDecorators} ->
lists:usort(route1(Delivery, SelectedDecorators, {[X], XName, []}))
end.
+fast_reply(<<"amq.consumer.", _/binary>>) -> true;
+fast_reply(_) -> false.
+
route1(_, _, {[], _, QNames}) ->
QNames;
route1(Delivery, Decorators,