diff options
| -rw-r--r-- | src/rabbit_exchange_decorator.erl | 8 | ||||
| -rw-r--r-- | src/rabbit_registry.erl | 5 |
2 files changed, 5 insertions, 8 deletions
diff --git a/src/rabbit_exchange_decorator.erl b/src/rabbit_exchange_decorator.erl index d860083565..45d0cbf50b 100644 --- a/src/rabbit_exchange_decorator.erl +++ b/src/rabbit_exchange_decorator.erl @@ -57,12 +57,10 @@ -callback remove_bindings(serial(), rabbit_types:exchange(), [rabbit_types:binding()]) -> 'ok'. -%% %% called after exchange routing -%% %% return value is a list of queues to be added to the list of -%% %% destination queues. decorators must register separately for -%% %% this callback using exchange_decorator_route. +%% Decorators can optionally implement route/2 which allows additional +%% queues to be added to the routing decision. %% -callback route(rabbit_types:exchange(), rabbit_types:delivery()) -> -%% [rabbit_amqqueue:name()]. +%% [rabbit_amqqueue:name() | rabbit_types:exchange()]. -else. diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index 22700a7c90..f6bc40718e 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -95,13 +95,12 @@ internal_unregister(Class, TypeName) -> true = ets:delete(?ETS_NAME, UnregArg), ok. - %% (un)register exchange decorator route callback only when implemented %% to avoid decorators being called unnecessarily on the fast publishing path -conditional_register({{exchange_decorator, _Type}, ModuleName}) -> +conditional_register({{exchange_decorator, Type}, ModuleName}) -> case erlang:function_exported(ModuleName, route, 2) of true -> true = ets:insert(?ETS_NAME, - {{exchange_decorator_route, _Type}, + {{exchange_decorator_route, Type}, ModuleName}); false -> ok end; |
