% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- %% ex: ft=erlang ts=4 sw=4 et [{kernel, [ {start_timer, true}, {start_pg2, true} ]}, {sasl, [ {sasl_error_logger, {file, "log/emqttd_sasl.log"}} ]}, {ssl, [ %{versions, ['tlsv1.2', 'tlsv1.1']} ]}, {lager, [ {colored, true}, {async_threshold, 1000}, {error_logger_redirect, false}, {crash_log, "log/emqttd_crash.log"}, {handlers, [ {lager_console_backend, info}, %%NOTICE: Level >= error %%{lager_emqtt_backend, error}, {lager_file_backend, [ {formatter_config, [time, " ", pid, " [",severity,"] ", message, "\n"]}, {file, "log/emqttd_info.log"}, {level, info}, {size, 104857600}, {date, "$D0"}, {count, 30} ]}, {lager_file_backend, [ {formatter_config, [time, " ", pid, " [",severity,"] ", message, "\n"]}, {file, "log/emqttd_error.log"}, {level, error}, {size, 104857600}, {date, "$D0"}, {count, 30} ]} ]} ]}, {esockd, [ {logger, {lager, info}} ]}, {emqttd, [ %% Authentication and Authorization {access, [ %% Authetication. Anonymous Default {auth, [ %% Authentication with username, password %{username, []}, %% Authentication with clientid %{clientid, [{password, no}, {file, "etc/clients.config"}]}, %% Authentication with LDAP % {ldap, [ % {servers, ["localhost"]}, % {port, 389}, % {timeout, 30}, % {user_dn, "uid=$u,ou=People,dc=example,dc=com"}, % {ssl, fasle}, % {sslopts, [ % {"certfile", "ssl.crt"}, % {"keyfile", "ssl.key"}]} % ]}, %% Allow all {anonymous, []} ]}, %% ACL config {acl, [ %% Internal ACL module {internal, [{file, "etc/acl.config"}, {nomatch, allow}]} ]} ]}, %% MQTT Protocol Options {mqtt, [ %% Packet {packet, [ %% Max ClientId Length Allowed {max_clientid_len, 1024}, %% Max Packet Size Allowed, 64K default {max_packet_size, 65536} ]}, %% Client {client, [ %% Socket is connected, but no 'CONNECT' packet received {idle_timeout, 10} %% seconds ]}, %% Session {session, [ %% Max number of QoS 1 and 2 messages that can be “in flight” at one time. %% 0 means no limit {max_inflight, 100}, %% Retry interval for redelivering QoS1/2 messages. {unack_retry_interval, 20}, %% Awaiting PUBREL Timeout {await_rel_timeout, 20}, %% Max Packets that Awaiting PUBREL, 0 means no limit {max_awaiting_rel, 0}, %% Statistics Collection Interval(seconds) {collect_interval, 20}, %% Expired after 2 days {expired_after, 48} ]}, %% Queue {queue, [ %% simple | priority {type, simple}, %% Topic Priority: 0~255, Default is 0 %% {priority, [{"topic/1", 10}, {"topic/2", 8}]}, %% Max queue length. Enqueued messages when persistent client disconnected, %% or inflight window is full. {max_length, infinity}, %% Low-water mark of queued messages {low_watermark, 0.2}, %% High-water mark of queued messages {high_watermark, 0.6}, %% Queue Qos0 messages? {queue_qos0, true} ]} ]}, %% Broker Options {broker, [ %% System interval of publishing broker $SYS messages {sys_interval, 60}, %% Retained messages {retained, [ %% Expired after seconds, never expired if 0 {expired_after, 0}, %% Max number of retained messages {max_message_num, 100000}, %% Max Payload Size of retained message {max_playload_size, 65536} ]}, %% PubSub and Router {pubsub, [ %% Default should be scheduler numbers {pool_size, 8}, %% Store Subscription: true | false {subscription, true}, %% Route aging time(seconds) {route_aging, 5} ]}, %% Bridge {bridge, [ %%TODO: bridge queue size {max_queue_len, 10000}, %% Ping Interval of bridge node {ping_down_interval, 1} %seconds ]} ]}, %% Modules {modules, [ %% Client presence management module. %% Publish messages when client connected or disconnected {presence, [{qos, 0}]}, %% Subscribe topics automatically when client connected {subscription, [ %% Static subscriptions from backend backend, %% $c will be replaced by clientid {"$queue/clients/$c", 1} ]} %% Rewrite rules %% {rewrite, [{file, "etc/rewrite.config"}]} ]}, %% Plugins {plugins, [ %% Plugin App Library Dir {plugins_dir, "./plugins"}, %% File to store loaded plugin names. {loaded_file, "./data/loaded_plugins"} ]}, %% Listeners {listeners, [ {mqtt, 1883, [ %% Size of acceptor pool {acceptors, 16}, %% Maximum number of concurrent clients {max_clients, 512}, %% Socket Access Control {access, [{allow, all}]}, %% Connection Options {connopts, [ %% Rate Limit. Format is 'burst, rate', Unit is KB/Sec %% {rate_limit, "100,10"} %% 100K burst, 10K rate ]}, %% Socket Options {sockopts, [ %Set buffer if hight thoughtput %{recbuf, 4096}, %{sndbuf, 4096}, %{buffer, 4096}, %{nodelay, true}, {backlog, 512} ]} ]}, {mqtts, 8883, [ %% Size of acceptor pool {acceptors, 4}, %% Maximum number of concurrent clients {max_clients, 512}, %% Socket Access Control {access, [{allow, all}]}, %% SSL certificate and key files {ssl, [{certfile, "etc/ssl/ssl.crt"}, {keyfile, "etc/ssl/ssl.key"}]}, %% Socket Options {sockopts, [ {backlog, 1024} %{buffer, 4096}, ]} ]}, %% WebSocket over HTTPS Listener %% {https, 8083, [ %% %% Size of acceptor pool %% {acceptors, 4}, %% %% Maximum number of concurrent clients %% {max_clients, 512}, %% %% Socket Access Control %% {access, [{allow, all}]}, %% %% SSL certificate and key files %% {ssl, [{certfile, "etc/ssl/ssl.crt"}, %% {keyfile, "etc/ssl/ssl.key"}]}, %% %% Socket Options %% {sockopts, [ %% %{buffer, 4096}, %% {backlog, 1024} %% ]} %%]}, %% HTTP and WebSocket Listener {http, 8083, [ %% Size of acceptor pool {acceptors, 4}, %% Maximum number of concurrent clients {max_clients, 64}, %% Socket Access Control {access, [{allow, all}]}, %% Socket Options {sockopts, [ {backlog, 1024} %{buffer, 4096}, ]} ]} ]}, %% Erlang System Monitor {sysmon, [ %% Long GC {long_gc, 100}, %% Long Schedule(ms) {long_schedule, 100}, %% 8M words. 32MB on 32-bit VM, 64MB on 64-bit VM. %% 8 * 1024 * 1024 {large_heap, 8388608}, %% Busy Port {busy_port, true}, %% Busy Dist Port {busy_dist_port, true} ]} ]} ].