Bläddra i källkod

feat(broker): reflect persisted messages in publish result

In order for callers to distinguish between silently dropped and
durably persisted message w/o matching subscribers.
Andrew Mayorov 2 år sedan
förälder
incheckning
e713fc38aa
2 ändrade filer med 12 tillägg och 2 borttagningar
  1. 11 2
      apps/emqx/src/emqx_broker.erl
  2. 1 0
      apps/emqx/src/emqx_types.erl

+ 11 - 2
apps/emqx/src/emqx_broker.erl

@@ -224,8 +224,17 @@ publish(Msg) when is_record(Msg, message) ->
             }),
             [];
         Msg1 = #message{topic = Topic} ->
-            _ = emqx_persistent_message:persist(Msg1),
-            route(aggre(emqx_router:match_routes(Topic)), delivery(Msg1))
+            PersistRes = persist_publish(Msg1),
+            PersistRes ++ route(aggre(emqx_router:match_routes(Topic)), delivery(Msg1))
+    end.
+
+persist_publish(Msg) ->
+    case emqx_persistent_message:persist(Msg) of
+        ok ->
+            [persisted];
+        {_SkipOrError, _Reason} ->
+            % TODO: log errors?
+            []
     end.
 
 %% Called internally

+ 1 - 0
apps/emqx/src/emqx_types.erl

@@ -244,6 +244,7 @@
 -type publish_result() :: [
     {node(), topic(), deliver_result()}
     | {share, topic(), deliver_result()}
+    | persisted
 ].
 -type route() :: #route{}.
 -type route_entry() :: {topic(), node()} | {topic, group()}.