@@ -2667,23 +2667,102 @@ end}.
2667
2667
{mapping , " message_interceptors.incoming.$interceptor.overwrite" , " rabbit.incoming_message_interceptors" , [
2668
2668
{datatype , {enum , [true , false ]}}]}.
2669
2669
2670
+ % Pseudo-key to include the interceptor in the list of interceptors.
2671
+ % - If any other configuration is provided for the interceptor this
2672
+ % configuration is not required.
2673
+ % - If no other configuration is provided, this one is required so that the
2674
+ % interceptor gets invoked.
2675
+ {mapping , " message_interceptors.incoming.$interceptor.enabled" , " rabbit.incoming_message_interceptors" , [
2676
+ {datatype , {enum , [true ]}}]}.
2677
+
2678
+ {mapping , " message_interceptors.outgoing.$interceptor.enabled" , " rabbit.outgoing_message_interceptors" , [
2679
+ {datatype , {enum , [true ]}}]}.
2680
+
2681
+ {mapping ,
2682
+ " message_interceptors.incoming.set_header_timestamp.overwrite" ,
2683
+ " rabbit.incoming_message_interceptors" ,
2684
+ [{datatype , {enum , [true , false ]}}]}.
2685
+ {mapping ,
2686
+ " message_interceptors.incoming.rabbit_message_interceptor_routing_node.overwrite" ,
2687
+ " rabbit.incoming_message_interceptors" ,
2688
+ [{datatype , {enum , [true , false ]}}]}.
2689
+
2690
+ {mapping ,
2691
+ " message_interceptors.incoming.set_header_routing_node.overwrite" ,
2692
+ " rabbit.incoming_message_interceptors" ,
2693
+ [{datatype , {enum , [true , false ]}}]}.
2694
+ {mapping ,
2695
+ " message_interceptors.incoming.rabbit_message_interceptor_timestamp.overwrite" ,
2696
+ " rabbit.incoming_message_interceptors" ,
2697
+ [{datatype , {enum , [true , false ]}}]}.
2698
+
2670
2699
{translation , " rabbit.incoming_message_interceptors" ,
2671
2700
fun (Conf ) ->
2672
- case cuttlefish_variable :filter_by_prefix (" message_interceptors" , Conf ) of
2673
- [] ->
2674
- cuttlefish :unset ();
2675
- L ->
2676
- [begin
2677
- Interceptor = list_to_atom (Interceptor0 ),
2678
- case lists :member (Interceptor , [set_header_timestamp ,
2679
- set_header_routing_node ]) of
2680
- true ->
2681
- {Interceptor , Overwrite };
2682
- false ->
2683
- cuttlefish :invalid (io_lib :format (" ~p is invalid" , [Interceptor ]))
2684
- end
2685
- end || {[" message_interceptors" , " incoming" , Interceptor0 , " overwrite" ], Overwrite } <- L ]
2686
- end
2701
+ case cuttlefish_variable :filter_by_prefix (" message_interceptors.incoming" , Conf ) of
2702
+ [] ->
2703
+ cuttlefish :unset ();
2704
+ L ->
2705
+ InterceptorsConfig = [
2706
+ {Module0 , Config , Value }
2707
+ || {[" message_interceptors" , " incoming" , Module0 , Config ], Value } <- L
2708
+ ],
2709
+ {Result , Order0 } = lists :foldl (
2710
+ fun ({Interceptor0 , Key0 , Value }, {Acc , Order }) ->
2711
+ Interceptor = list_to_atom (Interceptor0 ),
2712
+ Key = list_to_atom (Key0 ),
2713
+ MapPutFun = fun (Old ) -> maps :put (Key , Value , Old ) end ,
2714
+ % This Interceptor -> Module alias exists for
2715
+ % compatibility reasons
2716
+ Module = case Interceptor of
2717
+ set_header_timestamp ->
2718
+ rabbit_message_interceptor_timestamp ;
2719
+ set_header_routing_node ->
2720
+ rabbit_message_interceptor_routing_node ;
2721
+ _ ->
2722
+ Interceptor
2723
+ end ,
2724
+ NewAcc = maps :update_with (Module ,
2725
+ MapPutFun ,
2726
+ #{Key => Value },
2727
+ Acc ),
2728
+ {NewAcc , [Module | Order ]}
2729
+ end ,
2730
+ {#{}, []},
2731
+ InterceptorsConfig
2732
+ ),
2733
+ Order = lists :uniq (Order0 ),
2734
+ [{O , maps :without ([enabled ], maps :get (O , Result ))} || O <- Order ]
2735
+ end
2736
+ end
2737
+ }.
2738
+
2739
+ {translation , " rabbit.outgoing_message_interceptors" ,
2740
+ fun (Conf ) ->
2741
+ case cuttlefish_variable :filter_by_prefix (" message_interceptors.outgoing" , Conf ) of
2742
+ [] ->
2743
+ cuttlefish :unset ();
2744
+ L ->
2745
+ InterceptorsConfig = [
2746
+ {Module0 , Config , Value }
2747
+ || {[" message_interceptors" , " outgoing" , Module0 , Config ], Value } <- L
2748
+ ],
2749
+ {Result , Order0 } = lists :foldl (
2750
+ fun ({Interceptor0 , Key0 , Value }, {Acc , Order }) ->
2751
+ Module = list_to_atom (Interceptor0 ),
2752
+ Key = list_to_atom (Key0 ),
2753
+ MapPutFun = fun (Old ) -> maps :put (Key , Value , Old ) end ,
2754
+ NewAcc = maps :update_with (Module ,
2755
+ MapPutFun ,
2756
+ #{Key => Value },
2757
+ Acc ),
2758
+ {NewAcc , [Module | Order ]}
2759
+ end ,
2760
+ {#{}, []},
2761
+ InterceptorsConfig
2762
+ ),
2763
+ Order = lists :uniq (Order0 ),
2764
+ [{O , maps :without ([enabled ], maps :get (O , Result ))} || O <- Order ]
2765
+ end
2687
2766
end
2688
2767
}.
2689
2768
0 commit comments