From d9004d4cfb55019825315cb4cad3cbaf669349e6 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Fri, 10 Aug 2018 12:43:32 +0800 Subject: [PATCH] Add MQTT section in configuration file --- etc/emqx.conf | 68 +++++++++++++++++++++++++++++++-------- priv/emqx.schema | 84 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 121 insertions(+), 31 deletions(-) diff --git a/etc/emqx.conf b/etc/emqx.conf index 78e0a9f1a..83ddcf6a8 100644 --- a/etc/emqx.conf +++ b/etc/emqx.conf @@ -440,10 +440,50 @@ enable_acl_cache = on ## Default: 5 minute acl_cache_age = 5m -## The ACL cache size, 0 means no limit. +##-------------------------------------------------------------------- +## MQTT +##-------------------------------------------------------------------- + +## Maximum MQTT packet size allowed. ## -## Value: Integer -acl_cache_size = 0 +## Value: Bytes +## Default: 1MB +mqtt.max_packet_size = 1MB + +## Maximum length of MQTT clientId allowed. +## +## Value: Number [23-65535] +mqtt.max_clientid_len = 65535 + +## Maximum topic levels allowed. 0 means no limit. +## +## Value: Number +mqtt.max_topic_levels = 0 + +## Maximum QoS allowed. +## +## Value: 0 | 1 | 2 +mqtt.max_qos_allowed = 2 + +## Maximum Topic Alias, 0 means no limit. +## +## Value: 0-65535 +mqtt.max_topic_alias = 0 + +## Whether the Server supports MQTT retained messages. +## +## Value: boolean +mqtt.retain_available = true + +## Whether the Server supports MQTT Wildcard Subscriptions +## +## Value: boolean +mqtt.wildcard_subscription = true + +## Whether the Server supports MQTT Shared Subscriptions +## +## Value: boolean +mqtt.shared_subscription = true ##-------------------------------------------------------------------- ## Listeners @@ -1303,43 +1343,43 @@ zone.external.enable_stats = on ## Maximum MQTT packet size allowed. ## ## Value: Bytes -## Default: 64KB -zone.external.max_packet_size = 1MB +## Default: 1MB +## zone.external.max_packet_size = 64KB ## Maximum length of MQTT clientId allowed. ## ## Value: Number [23-65535] -zone.external.max_clientid_len = 65535 +## zone.external.max_clientid_len = 1024 ## Maximum topic levels allowed. 0 means no limit. ## ## Value: Number -zone.external.max_topic_levels = 0 +## zone.external.max_topic_levels = 7 ## Maximum QoS allowed. ## ## Value: 0 | 1 | 2 -zone.external.max_qos_allowed = 2 +## zone.external.max_qos_allowed = 2 ## Maximum Topic Alias, 0 means no limit. ## ## Value: 0-65535 -zone.external.max_topic_alias = 0 +## zone.external.max_topic_alias = 0 ## Whether the Server supports retained messages. ## ## Value: boolean -zone.external.retain_available = true +## zone.external.retain_available = true ## Whether the Server supports Wildcard Subscriptions ## ## Value: boolean -zone.external.wildcard_subscription = true +## zone.external.wildcard_subscription = false ## Whether the Server supports Shared Subscriptions ## ## Value: boolean -zone.external.shared_subscription = true +## zone.external.shared_subscription = false ## The backoff for MQTT keepalive timeout. The broker will kick a connection out ## until 'Keepalive * backoff * 2' timeout. @@ -1421,12 +1461,12 @@ zone.internal.enable_acl = off ## See zone.$name.wildcard_subscription. ## ## Value: boolean -zone.internal.wildcard_subscription = true +## zone.internal.wildcard_subscription = true ## See zone.$name.shared_subscription. ## ## Value: boolean -zone.internal.shared_subscription = true +## zone.internal.shared_subscription = true ## See zone.$name.max_subscriptions. ## diff --git a/priv/emqx.schema b/priv/emqx.schema index d138a4f50..a81d21799 100644 --- a/priv/emqx.schema +++ b/priv/emqx.schema @@ -578,11 +578,64 @@ end}. ]}. %% @doc ACL cache size. -{mapping, "acl_cache_size", "emqx.acl_cache_size", [ +%% {mapping, "acl_cache_size", "emqx.acl_cache_size", [ +%% {default, 0}, +%% {datatype, integer} +%% ]}. + +%%-------------------------------------------------------------------- +%% MQTT +%%-------------------------------------------------------------------- + +%% @doc Max Packet Size Allowed, 1MB by default. +{mapping, "mqtt.max_packet_size", "emqx.max_packet_size", [ + {default, "1MB"}, + {datatype, bytesize} +]}. + +%% @doc Set the Max ClientId Length Allowed. +{mapping, "mqtt.max_clientid_len", "emqx.max_clientid_len", [ + {default, 65535}, + {datatype, integer} +]}. + +%% @doc Set the Maximum topic levels. +{mapping, "mqtt.max_topic_levels", "emqx.max_topic_levels", [ {default, 0}, {datatype, integer} ]}. +%% @doc Set the Maximum QoS allowed. +{mapping, "mqtt.max_qos_allowed", "emqx.max_qos_allowed", [ + {default, 2}, + {datatype, integer}, + {validators, ["range:0-2"]} +]}. + +%% @doc Set the Maximum topic alias. +{mapping, "mqtt.max_topic_alias", "emqx.max_topic_alias", [ + {default, 0}, + {datatype, integer} +]}. + +%% @doc Whether the server supports MQTT retained messages. +{mapping, "mqtt.retain_available", "emqx.mqtt_retain_available", [ + {default, true}, + {datatype, {enum, [true, false]}} +]}. + +%% @doc Whether the Server supports MQTT Wildcard Subscriptions. +{mapping, "mqtt.wildcard_subscription", "emqx.mqtt_wildcard_subscription", [ + {default, true}, + {datatype, {enum, [true, false]}} +]}. + +%% @doc Whether the Server supports MQTT Shared Subscriptions. +{mapping, "mqtt.shared_subscription", "emqx.mqtt_shared_subscription", [ + {default, true}, + {datatype, {enum, [true, false]}} +]}. + %%-------------------------------------------------------------------- %% Listeners %%-------------------------------------------------------------------- @@ -1211,50 +1264,42 @@ end}. %% @doc Max Packet Size Allowed, 64K by default. {mapping, "zone.$name.max_packet_size", "emqx.zones", [ - {default, "64KB"}, {datatype, bytesize} ]}. %% @doc Set the Max ClientId Length Allowed. {mapping, "zone.$name.max_clientid_len", "emqx.zones", [ - {default, 65535}, {datatype, integer} ]}. %% @doc Set the Maximum topic levels. {mapping, "zone.$name.max_topic_levels", "emqx.zones", [ - {default, 0}, {datatype, integer} ]}. %% @doc Set the Maximum QoS allowed. {mapping, "zone.$name.max_qos_allowed", "emqx.zones", [ - {default, 2}, {datatype, integer}, {validators, ["range:0-2"]} ]}. %% @doc Set the Maximum topic alias. {mapping, "zone.$name.max_topic_alias", "emqx.zones", [ - {default, 0}, {datatype, integer} ]}. %% @doc Whether the server supports retained messages. {mapping, "zone.$name.retain_available", "emqx.zones", [ - {default, true}, {datatype, {enum, [true, false]}} ]}. %% @doc Whether the Server supports Wildcard Subscriptions. {mapping, "zone.$name.wildcard_subscription", "emqx.zones", [ - {default, true}, {datatype, {enum, [true, false]}} ]}. %% @doc Whether the Server supports Shared Subscriptions. {mapping, "zone.$name.shared_subscription", "emqx.zones", [ - {default, true}, {datatype, {enum, [true, false]}} ]}. @@ -1327,16 +1372,21 @@ end}. ]}. {translation, "emqx.zones", fun(Conf) -> + Mapping = fun(retain_available, Val) -> + {mqtt_retain_available, Val}; + (wildcard_subscription, Val) -> + {mqtt_wildcard_subscription, Val}; + (shared_subscription, Val) -> + {mqtt_shared_subscription, Val}; + (Opt, Val) -> {Opt, Val} + end, maps:to_list( lists:foldl( - fun({["zone", Name, Opt], Val}, Acc) -> - ZName = list_to_atom(Name), - case maps:find(ZName, Acc) of - {ok, Opts} -> - maps:put(ZName, [{list_to_atom(Opt), Val} | Opts], Acc); - error -> - maps:put(ZName, [{list_to_atom(Opt), Val}], Acc) - end + fun({["zone", Name, Opt], Val}, Zones) -> + maps:update_with(list_to_atom(Name), + fun(Opts) -> + [Mapping(list_to_atom(Opt), Val)|Opts] + end, [], Zones) end, #{}, lists:usort(cuttlefish_variable:filter_by_prefix("zone.", Conf)))) end}.