Просмотр исходного кода

fix(emqx_delayed): fix config update not working

firest 4 лет назад
Родитель
Сommit
2053d21bd5
2 измененных файлов с 21 добавлено и 14 удалено
  1. 21 0
      apps/emqx_modules/src/emqx_delayed.erl
  2. 0 14
      apps/emqx_modules/src/emqx_delayed_api.erl

+ 21 - 0
apps/emqx_modules/src/emqx_delayed.erl

@@ -47,6 +47,7 @@
         , list/1
         , get_delayed_message/1
         , delete_delayed_message/1
+        , post_config_update/5
         ]).
 
 -export([format_delayed/1]).
@@ -189,11 +190,30 @@ delete_delayed_message(Id0) ->
 update_config(Config) ->
     emqx_conf:update([delayed], Config, #{rawconf_with_defaults => true, override_to => cluster}).
 
+post_config_update(_KeyPath, Config, _NewConf, _OldConf, _AppEnvs) ->
+    case maps:get(<<"enable">>, Config, undefined) of
+        undefined ->
+            ignore;
+        true ->
+            emqx_delayed:enable();
+        false ->
+            emqx_delayed:disable()
+    end,
+    case maps:get(<<"max_delayed_messages">>, Config, undefined) of
+        undefined ->
+            ignore;
+        Max ->
+            ok = emqx_delayed:set_max_delayed_messages(Max)
+    end,
+    ok.
+
 %%--------------------------------------------------------------------
 %% gen_server callback
 %%--------------------------------------------------------------------
 
 init([Opts]) ->
+    erlang:process_flag(trap_exit, true),
+    emqx_conf:add_handler([delayed], ?MODULE),
     MaxDelayedMessages = maps:get(max_delayed_messages, Opts, 0),
     {ok, ensure_stats_event(
            ensure_publish_timer(#{timer => undefined,
@@ -252,6 +272,7 @@ handle_info(Info, State) ->
     {noreply, State}.
 
 terminate(_Reason, #{timer := TRef}) ->
+    emqx_conf:remove_handler([delayed]),
     emqx_misc:cancel_timer(TRef).
 
 code_change(_Vsn, State, _Extra) ->

+ 0 - 14
apps/emqx_modules/src/emqx_delayed_api.erl

@@ -224,20 +224,6 @@ generate_max_delayed_messages(Config) ->
 update_config_(Config) ->
     case emqx_delayed:update_config(Config) of
         {ok, #{raw_config := NewDelayed}} ->
-            case maps:get(<<"enable">>, Config, undefined) of
-                undefined ->
-                    ignore;
-                true ->
-                    emqx_delayed:enable();
-                false ->
-                    emqx_delayed:disable()
-            end,
-            case maps:get(<<"max_delayed_messages">>, Config, undefined) of
-                undefined ->
-                    ignore;
-                Max ->
-                    ok = emqx_delayed:set_max_delayed_messages(Max)
-            end,
             {200, NewDelayed};
         {error, Reason} ->
             Message = list_to_binary(