fix: delayed message api doc (#5569)

* fix: delayed message api doc & add delayed message internal & remaning params
This commit is contained in:
DDDHuang 2021-08-26 15:11:41 +08:00 committed by GitHub
parent 7e63e2b6eb
commit bcd15e9388
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 11 deletions

View File

@ -50,7 +50,7 @@
, delete_delayed_message/1
]).
-record(delayed_message, {key, msg}).
-record(delayed_message, {key, delayed, msg}).
-define(TAB, ?MODULE).
-define(SERVER, ?MODULE).
@ -78,19 +78,19 @@ on_message_publish(Msg = #message{
timestamp = Ts
}) ->
[Delay, Topic1] = binary:split(Topic, <<"/">>),
PubAt = case binary_to_integer(Delay) of
{PubAt, Delayed} = case binary_to_integer(Delay) of
Interval when Interval < ?MAX_INTERVAL ->
Interval + erlang:round(Ts / 1000);
{Interval + erlang:round(Ts / 1000), Interval};
Timestamp ->
%% Check malicious timestamp?
case (Timestamp - erlang:round(Ts / 1000)) > ?MAX_INTERVAL of
true -> error(invalid_delayed_timestamp);
false -> Timestamp
false -> {Timestamp, Timestamp - erlang:round(Ts / 1000)}
end
end,
PubMsg = Msg#message{topic = Topic1},
Headers = PubMsg#message.headers,
case store(#delayed_message{key = {PubAt, Id}, msg = PubMsg}) of
case store(#delayed_message{key = {PubAt, Id}, delayed = Delayed, msg = PubMsg}) of
ok -> ok;
{error, Error} ->
?LOG(error, "Store delayed message fail: ~p", [Error])
@ -128,15 +128,22 @@ list(Params) ->
format_delayed(Delayed) ->
format_delayed(Delayed, false).
format_delayed(#delayed_message{key = {TimeStamp, Id},
format_delayed(#delayed_message{key = {ExpectTimeStamp, Id}, delayed = Delayed,
msg = #message{topic = Topic,
from = From,
headers = #{username := Username},
qos = Qos,
timestamp = PublishTimeStamp,
payload = Payload}}, WithPayload) ->
PublishTime = to_rfc3339(PublishTimeStamp div 1000),
ExpectTime = to_rfc3339(ExpectTimeStamp),
RemainingTime = ExpectTimeStamp - erlang:system_time(second),
Result = #{
id => emqx_guid:to_hexstr(Id),
publish_time => list_to_binary(calendar:system_time_to_rfc3339(TimeStamp, [{unit, second}])),
publish_at => PublishTime,
delayed_interval => Delayed,
delayed_remaining => RemainingTime,
expected_at => ExpectTime,
topic => Topic,
qos => Qos,
from_clientid => From,
@ -149,6 +156,9 @@ format_delayed(#delayed_message{key = {TimeStamp, Id},
Result
end.
to_rfc3339(Timestamp) ->
list_to_binary(calendar:system_time_to_rfc3339(Timestamp, [{unit, second}])).
get_delayed_message(Id0) ->
Id = emqx_guid:from_hexstr(Id0),
Ms = [{{delayed_message,{'_',Id},'_'},[],['$_']}],

View File

@ -59,12 +59,15 @@ properties() ->
[?PAYLOAD_TOO_LARGE, ?MAX_PAYLOAD_LENGTH]),
properties([
{id, integer, <<"Message Id (MQTT message id hash)">>},
{publish_time, string, <<"publish time, rfc 3339">>},
{publish_at, string, <<"Client publish message time, rfc 3339">>},
{delayed_interval, integer, <<"Delayed interval, second">>},
{delayed_remaining, integer, <<"Delayed remaining, second">>},
{expected_at, string, <<"Expect publish time, rfc 3339">>},
{topic, string, <<"Topic">>},
{qos, string, <<"QoS">>},
{payload, string, iolist_to_binary(PayloadDesc)},
{form_clientid, string, <<"Form ClientId">>},
{form_username, string, <<"Form Username">>}
{from_clientid, string, <<"From ClientId">>},
{from_username, string, <<"From Username">>}
]).
parameters() ->

View File

@ -21,7 +21,7 @@
-compile(export_all).
-compile(nowarn_export_all).
-record(delayed_message, {key, msg}).
-record(delayed_message, {key, delayed, msg}).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").