diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index ce4840eb9..6c8466aab 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -3630,9 +3630,9 @@ mqtt_general() -> )}, {"retry_interval", sc( - duration(), + hoconsc:union([infinity, duration()]), #{ - default => <<"30s">>, + default => infinity, desc => ?DESC(mqtt_retry_interval) } )}, diff --git a/apps/emqx/src/emqx_session_mem.erl b/apps/emqx/src/emqx_session_mem.erl index 2d8ebb2f9..c3cc17926 100644 --- a/apps/emqx/src/emqx_session_mem.erl +++ b/apps/emqx/src/emqx_session_mem.erl @@ -602,9 +602,9 @@ handle_timeout(ClientInfo, expire_awaiting_rel, Session) -> %%-------------------------------------------------------------------- -spec retry(clientinfo(), session()) -> - {ok, replies(), session()}. -retry(ClientInfo, Session = #session{inflight = Inflight}) -> - case emqx_inflight:is_empty(Inflight) of + {ok, replies(), session()} | {ok, replies(), timeout(), session()}. +retry(ClientInfo, Session = #session{inflight = Inflight, retry_interval = Interval}) -> + case emqx_inflight:is_empty(Inflight) orelse Interval =:= infinity of true -> {ok, [], Session}; false -> diff --git a/changes/ce/breaking-13080.en.md b/changes/ce/breaking-13080.en.md new file mode 100644 index 000000000..3cd638171 --- /dev/null +++ b/changes/ce/breaking-13080.en.md @@ -0,0 +1,8 @@ +Change `mqtt.retry_interval` config default to `infinity`. + +Previously, the default value for `retry_interval` was 30 seconds. + +The new default has been changed to 'infinity'. With this update, EMQX will not automatically retry message deliveries by default. + +Aligning with MQTT specification standards, in-session message delivery retries are not typically compliant. +We recognize that some users depend on this feature, so the option to configure retries remains available for backward compatibility.