Explorar o código

simple/priority queue

Feng %!s(int64=10) %!d(string=hai) anos
pai
achega
97ea3623c1
Modificáronse 1 ficheiros con 307 adicións e 0 borrados
  1. 307 0
      rel/files/emqttd.config.production

+ 307 - 0
rel/files/emqttd.config.production

@@ -0,0 +1,307 @@
+% -*- 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, 5000},
+    {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_error.log"},
+            {level, error},
+            {size, 104857600},
+            {date, "$D0"},
+            {count, 30}
+        ]}
+    ]}
+ ]},
+ {esockd, [
+    {logger, {lager, error}}
+ ]},
+ {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, 20} %% seconds
+            %TODO: Network ingoing limit
+            %{ingoing_rate_limit, '64KB/s'}
+            %TODO: Reconnet control
+        ]},
+        %% 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, 60},
+
+            %% 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, 0},
+
+            %% 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},
+            
+            %% Subscription: disc | ram | false
+            {subscription, ram},
+
+            %% Route shard
+            {route_shard, false},
+
+            %% Route delay, false | integer
+            {route_delay, false},
+
+            %% 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, [
+        %%    %% Subscription from stored table
+        %%    stored,
+        %%
+        %%   %% $u will be replaced with username
+        %%    {"$Q/username/$u", 1},
+        %%
+        %%   %% $c will be replaced with clientid
+        %%    {"$Q/client/$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, 8192},
+
+            %% 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, 1024}
+            ]}
+        ]},
+
+        {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, don't monitor in production mode for:
+        %% https://github.com/erlang/otp/blob/feb45017da36be78d4c5784d758ede619fa7bfd3/erts/emulator/beam/erl_gc.c#L421
+        {long_gc, false},
+
+        %% Long Schedule(ms)
+        {long_schedule, 240},
+
+        %% 8M words. 32MB on 32-bit VM, 64MB on 64-bit VM.
+        %% 8 * 1024 * 1024
+        {large_heap, 8388608},
+
+        %% Busy Port
+        {busy_port, false},
+
+        %% Busy Dist Port
+        {busy_dist_port, true}
+
+    ]}
+ ]}
+].
+