EMQ v2.1.0-beta.1 is now available.
We improved the design of Session/Inflight and use one timer to redeliver the inflight QoS1/2 messages, and tuned the GC mechanism of MQTT connection process to reduce CPU usage at the high rate of messages.
Since 2.1.0 release, we will tag EMQ versions according to the Semantic Versioning 2.0.0 principles. And we will release EMQ versions monthly, odd number releases for bugfix and optimization, and even number releases for bugfix and new features.
Warning: EMQ 2.1+ Requires Erlang/OTP R19+ to build.
Tuning GC
All the WebSocket, Client, Session processes will hiberante and GC after a period of idle time.
Add 'mqtt.conn.force_gc_count' configuration to force the Client, Session processes to GC when high message throughput.
Tune the 'fullsweep_after' option of WebSocket, Client, Session processes.
New Features
Per Client, Session Statistics
Support Per Client, Session Statistics. Enable by configuration in etc/emq.conf:
mqtt.client.enable_stats = on
mqtt.session.enable_stats = on
Add 'missed' Metrics
The 'missed' metrics will be increased when EMQ broker received PUBACK, PUBREC, PUBREL, PUBCOMP packets from clients, but missing in inflight window:
packets/puback/missed
packets/pubrec/missed
packets/pubrel/missed
packets/pubcomp/missed
Syslog Integration
Output EMQ log to syslog:
## Syslog. Enum: on, off
log.syslog = on
## syslog level. Enum: debug, info, notice, warning, error, critical, alert, emergency
log.syslog.level = error
Upgrade QoS
Support to upgrade QoS accoding to the subscription:
mqtt.session.upgrade_qos = on
Add 'acl reload' CLI
Reload acl.conf without restarting emqttd service (#885)
Improvements
etc/emq.conf Changes
- Rename mqtt.client_idle_timeout to mqtt.client.idle_timeout
- Add mqtt.client.enable_stats
- Add mqtt.session.upgrade_qos
- Delete mqtt.session.collect_interval
- Add mqtt.session.enable_stats
- Rename mqtt.session.expired_after to mqtt.session.expiry_interval
Hooks API
Hooks module now support to register the same function with different tags.
Merge modules to emq_modules
Merge the emq_mod_presence, emq_mod_subscription, emq_mod_rewrite into emq_modules
Rename emq_mod_retainer to emq_retainer project
Bugfix
emqttd#916: Add 'mqtt_msg_from()' type
emq-auth-http#15: ACL endpoint isnt called
Plugins
Dashboard Plugin
Overview page: Add 'missed' metrics
Client page: Add 'SendMsg', 'RecvMsg' Fields
Session page: DeliverMsg、EnqueueMsg Fields
recon Plugin
Change the datatype of 'recon.gc_interval' to duration
reloader Plugin
Change the datatype of 'reloader.interval' to duration