From c027e998eeb86f9c688c93c73816b58cb2c9a54f Mon Sep 17 00:00:00 2001 From: Diana Parra Corbacho Date: Wed, 5 Nov 2025 14:18:04 +0100 Subject: [PATCH] Rabbit registry: Dinamically allow to define new classes rabbit_registry classes are currently static, hard-coded in rabbit registry. Dinamically searching for new classes using Erlang attributes allows for plugins to add new classes and make use of the registry. i.e. shovel protocols can benefit of this feature (cherry picked from commit ca2bdfb5a6f77f040376b9670581566055c6fd99) --- deps/rabbit_common/src/rabbit_registry.erl | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/deps/rabbit_common/src/rabbit_registry.erl b/deps/rabbit_common/src/rabbit_registry.erl index 59d36a2921b5..a2af8fa5e3a2 100644 --- a/deps/rabbit_common/src/rabbit_registry.erl +++ b/deps/rabbit_common/src/rabbit_registry.erl @@ -190,7 +190,18 @@ class_module(policy_validator) -> rabbit_policy_validator; class_module(operator_policy_validator) -> rabbit_policy_validator; class_module(policy_merge_strategy) -> rabbit_policy_merge_strategy; class_module(ha_mode) -> rabbit_mirror_queue_mode; -class_module(channel_interceptor) -> rabbit_channel_interceptor. +class_module(channel_interceptor) -> rabbit_channel_interceptor; +class_module(Other) -> + AttrsPerApp = rabbit_misc:rabbitmq_related_module_attributes(rabbit_registry_class), + find_class_module(Other, AttrsPerApp). + +find_class_module(Class, [{_, Module, List} | Rest]) -> + case lists:member(Class, List) of + true -> Module; + false -> find_class_module(Class, Rest) + end; +find_class_module(Class, []) -> + throw({invalid_class, Class}). %%---------------------------------------------------------------------------