A distributed MQTT message broker based on Erlang/OTP. Built for high quality & Industrial use cases. The VerneMQ mission is active & the project maintained. Thank you for your support!
APACHE-2.0 License
Bot releases are hidden (Show)
Published by vmq-ci almost 5 years ago
VerneMQ software distribution packages and Docker images are now covered by the VerneMQ EULA. See the blog post describing the change:
https://vernemq.com/blog/2019/11/26/vernemq-end-user-license-agreement.html.
sec-websocket-protocol
header to cause a crash to be logged. This case ishackney
so VerneMQ is compatible with a TLS change in Erlang/OTPepgsql
dependency to version 4.3.0 to get better error messagesmax_last_will_delay
value client
which means the value from theclient
valueresponse_timeout
to vmq_webhooks
endpoints. With thisvmq_webhooks
waits for a response from the remote endpoint can beon_deliver/6
and on_deliver_m5/7
hooks which adds QoS and retainedon_session_expired/1
hook which is called when an offline sessionvmq-admin listener start
command (#1348).Published by vmq-ci about 5 years ago
vmq_diversity
and vmq_webhooks
where the plugin hooks would bePublished by vmq-ci about 5 years ago
cuttlefish
to fix parse issue with lines in the vernemq.conf
filevmq_webhooks
auth_on_subscribe_m5
and on_subscribe_m5
vmq_swc
which could prevent VerneMQ from starting up.Published by vmq-ci about 5 years ago
vernemq version
(#1190).sec-websocket-protocol
correctly (#1149) in the websocketlager
to version 3.7.0 (In preparation for OTP 22 support).--no_payload=true
which, if enabled, willauth_on_publish
auth_on_publish_m5
payloads. The flag can also be set in the config filevmq_webhooks.hookname.no_payload=on
.client_keepalive_expired
which tracks clients that failed tocrypto:hash/1
function in LUA, for example to do a 256bit sha3crypto.hash("sha3_256", data)
. The hashing algorithmscrypto:hash/1
function andbcrypt.hashpw/2
LUA function invmq_diversity
.vmq-admin
when called via sudo
.cuttlefish
to version 2.2.0.username
on auth_on_register
and auth_on_register_m5
vmq_diversity
and vmq_webhooks
.vmq_diversity
redis driver eredis
to version 1.2.0.vmq_diversity
supervisor restart shutdown issue (#1241).Published by vmq-ci over 5 years ago
allow_multiple_sessions
option is deprecated and will be removed incoordinated_registrations
config option which allows for fasterallow_multiple_sessions
).swc
. Improves memory and cpu usage by fixing node clockpersistent_client_expiration
) timer on queues after ajson.decode()
when decoding empty Json objects (#1080).vmq_diversity
cache invalidation timing issue when a client reconnectsvmq_bridge
(#1084).atomics
and persistent_term
to handle metrics instead of using themzmetrics
library which has been removed.vmq_reg:publish/4
to return {ok, {NumLocalMatches, NumRemoteMatchs}}
ok
. This introduces a breaking change to the unofficial publishvmq_reg:direct_publish_exports/1
.router_matches_local
and router_matches_remote
counter metrics,75 / 25
indicatingPayload
and Properties
arguments to the on_deliver_m5
hook have_m5
hooks.user_property
is nowp_user_property
.properties
modifier map. So for{ok, #{p_user_property => ...}}
one now{ok, #{property => #{p_user_property => ...}}}
. This change makesvmq_webhooks
plugin property modifiers have been moved into aproperties
inside the modifiers JSONvmq_webhooks
.{ok, binary()}
return clause has been removed from the on_deliver_m5
{ok, Modifiers}
) instead.{ok, binary()}
return clause has been removed from theauth_on_publish_m5
hook, use the modifier map ({ok, Modifiers}
) instead.vernemq.conf
exist and arevmq_webhooks
plugin: support more propertiesnode_package
dependency to build binary packages, thefpm
is used. This enables cleaning up therebar3
build tool.vmq_diversity
plugin: support all MQTT 5.0vmq_diversity
. Fixes #811.vmq_diversity
.vmq_diversity
plugin.vmq_bcrypt.pool_size
config.hackney
to version 1.15.1 (dependencies of hackney
were updated assocket_close_timeout
metric. The metric counts the number of timesclose_timeout
messages triggeredvmq_mqtt_pre_init
.debug
to warning
when VerneMQ forcefully terminates avmq_diversity
ACL rule hash collision issue (#1164).vmq_pulse
plugin. This plugin periodically sends cluster information tovmq-admin pulse setup
. This enables a supportvmq-admin cluster show
vmq-admin plugin show --internal
vmq-admin metrics show
uname -a
vmq_pulse
plugin is in Beta.LimitNOFILE=infinity
. This enables VerneMQvernemq
user.Published by dergraf over 5 years ago
swc
. Improves memory and cpu usage by fixing node clockpersistent_client_expiration
) timer on queues after ajson.decode()
when decoding empty Json objects (#1080).vmq_diversity
cache invalidation timing issue when a client reconnectsvmq_bridge
(#1084).Published by vmq-ci over 5 years ago
vmq_webhooks
issue where MQTTv5 hooks where not configurable in thevernemq.conf
file.vmq_bridge
.max_message_rate
to include MQTTv5 sessions.throttle
modifier for the auth_on_publish
andauth_on_publish_m5
hooks which will throttle the publishing client byvmq-admin
commands (#644).vmq_health_http
exposing a /health
endpoint thatgmake rel
.vmq_diversity
error message if invalid or unknown modifiers are returnedauth_on_publish_m5
(#964).vmq_mqtt_pre_init
(#950, #962).vmq-admin session show
to crash when using--limit=X
to limit the number of returned results (#902).vernemq_dev_api:disconnect_by_subscriber_id/2
in luavmq_api.disconnect_by_subscriber_id/2
, an example looks like:vmq_api.disconnect_by_subscriber_id({mountpoint = "", client_id = "client-id"}, {do_cleanup = true})
.vmq_webhooks
errors so the error from the endpoint is shown as thei_have
messages when the mailboxplumtree.drop_i_have_threshold
hidden option. The default is 1000000. Thisvmq-admin retain
commands to inspect the retained message store.vmq_diversity
,vmq_diversity.mysql.password_hash_method
option which allows:password
(default for compatibility), md5
, sha1
or sha256
./status.json
endpoint to have a valid JSON output (#786).vmq-admin session show
by fixing thevmq_ql
row initializer to handle plugin sessions (the bridge starts a localsext
to 1.5.0 (required for better OSX compilation).vmq_diversity
PostgreSQL reconnect issue (#1008).vmq_webhooks
so peer port is not considered when caching theauth_on_register
to avoid cache misses.vmq_swc
.vmq_swc
metadata plugin (using the already existing LevelDB backend) tovmq_swc
instead of vmq_plumtree
setmetadata_plugin = vmq_swc
in vernemq.conf
. vmq_swc
is still in Beta.mqtt_connack_sent
metric for CONNACKvmq_reg_sync
aftervmq_in_order_delivery_SUITE
tests to fail.auth_on_subscribe
auth_on_subscribe_m5
hooks. This feature is exposed as a developer API in vernemq_dev
, viavmq-admin session reauthorize
CLI command, and as a API for vmq_diversity
Lua scripts. Thissystem_process_count
which is a gauge representing thequeue_started_at
and session_started_at
information to the vmq-admin session show
command. Times are POSIX time in milliseconds and local to thePublished by larshesel almost 6 years ago
max_message_rate
to include MQTTv5 sessions.vmq-admin
commands (#644).vmq_diversity
error message if invalid or unknown modifiers are returnedauth_on_publish_m5
(#964).vmq_mqtt_pre_init
(#950, #962).vmq-admin session show
to crash when using--limit=X
to limit the number of returned results (#902).Published by larshesel almost 6 years ago
vmq_webhooks
issue where MQTTv5 hooks where not configurable in thevernemq.conf
file.Published by dergraf almost 6 years ago
Fix issue when calling a function in a Lua script that requires more time to complete than the default gen_server
timeout (#589).
Silently drop messages published by the client that use a routing key starting with '$'.
Full MQTTv5 support
With this release VerneMQ officially supports MQTT protocol version
5.0. The MQTTv5 support is currently marked as in BETA and we may
still have to change some things.
VerneMQ has full support for the complete MQTTv5 spec, but to list a
few of the new features:
Support for enhanced (re)authentication
User properties
Message Expiration
Last Will and Testament delay
Shared subscriptions
Retained messages
Request/Response flows
Topic aliases
VerneMQ supports topic aliases from both the client to the broker and from
the broker to the client.
When a client connects to the broker, the broker will inform the client of
the maximum allowed topic alias using the topic alias max property on the
CONNACK packet (if it has been set to a non-zero value). The topic alias
maximum property can be configured through the topic_alias_max
configuration variable or overriden in a plugin in the auth_on_register
hook. The broker will then handle topic aliases from the client as per the
MQTTv5 spec.
Flow control
Subscription flags Retain as Published, No Local and Retain Handling.
Subscriber ids
By default MQTTv5 is disabled, but can be enabled on a listener basis, for
example listener.tcp.allowed_protocol_versions=3,4,5
would enable MQTT
version 3.1, 3.1.1 and 5.0 on the TCP listener.
MQTTv5 support has been added to the vmq_passwd
, vmq_acl
, vmq_webhooks
plugins as well as the parts of the vmq_diversity
plugin to support the
MySQL, PostgreSQL, Redis and MongoDB authentication and authorization
mechanisms. The Lua scripting language provided by the vmq_diversity
plugin
does not yet expose all MQTT 5.0 plugin hooks.
The vmq_bridge
plugin currently has no support for MQTTv5.
!! Note !! that all MQTTv5 related features and plugins are in BETA and may
still change if needed.
The metrics:
mqtt_connack_not_authorized_sent
mqtt_connack_bad_credentials_sent
mqtt_connack_server_unavailable_sent
mqtt_connack_identifier_rejected_sent
mqtt_connack_unacceptable_protocol_sent
mqtt_connack_accepted_sent
Have been merged into a single metric mqtt_connack_sent
and the various MQTT
3.1.1 return codes have been mapped into labels. So for example
mqtt_connack_sent
with the label return_code=success
replaces
mqtt_connack_accepted_sent
.
Added on_message_drop hook that is called for every message dropped due to
exceeding the MQTTv5 max_packet_size property, hitting the message expiry,
or when load shedding when enqueing messages.
Fix ordering bug in webhook subscribe topic authentication and topic rewrites
(#823)
Fix issue when terminating the vmq_server
application (#828).
Make VerneMQ build on SmartOS / Illumos / Solaris.
Ensure strings passed from Lua to the logger are escaped (#864).
Handle Mongo Date / ISODate datatype properly in Lua / vmq_diversity
(#857).
Optimize subscribe/unsubscribe operations for large fanout cases.
Allow non-standard MQTT version 131 (MQTT 3.1 bridge) by default (this was
accidentally changed in VerneMQ 1.4.0).
Improve error messages returned by the vmq_diversity
plugin so it's easier
to understand and debug authentication and authorisation issues.
Improve performance for looking up queue processes.
Make VerneMQ run on Erlang/OTP 21. To do this we had to upgrade rebar3
to
version 3.6.0 and lager
to version 3.6.3. We also removed the eper
dependency and suppressed some new warnings due to erlang:get_stacktrace/0
having been deprecated in Erlang/OTP 21.
The bridge plugin (vmq_bridge
) now has an option to queue outgoing message
in case the network connection disappears. This is configurable with the
max_outgoing_buffered_messages
setting on a bridge. In addition the bridge
now has a simple cli interface under vmq-admin bridge show
. This work was
kindly sponsored by Diacare-Soft(http://diacare-soft.ru).
Fix multiple message retry issues in the MQTT client used by vmq_bridge.
Fix issue where the message ordering wasn't preserved after a client reconnect.
Add experimental vmq_swc
plugin that provides an alternative to the existing
vmq_plumtree
for metadata storage and replication. One must compile VerneMQ
with make swc
to generate a release containing the vmq_swc
plugin.
Remove unused vmq_bridge
ssl capath
config option. This was never used
internally.
Published by dergraf about 6 years ago
suppress_lwt_on_session_takeover
in theoff
.message_size_limit
only when it has been defined.vernemq_1.4.0-10-gde1b1f5-1_amd64.deb
, where de1b1f5
refers to the commit10
is the number of commits sincegraphite_include_labels
has to be seton
in the vernemq.conf
file. Labels are not exposed in the $SYSvmq_bridge
is properly restarted after a crash (#785).http.body(ref)
in a Lua script would not returnhttp.body(ref)
or notPublished by dergraf about 6 years ago
vmq_bridge
is properly restarted after a crash (#785).http.body(ref)
in a Lua script would not returnhttp.body(ref)
or notPublished by dergraf over 6 years ago
Published by dergraf over 6 years ago
vmq_passwd
due to openssl headers not found.vmq_reg:direct_plugin_exports/1
function. Even though this function isauth_on_subscribe
, on_subscribe
oron_unsuscribe
hooks will no longer be called when using the exportedvmq-admin
help commands.vmq_webhooks
. vmq_webhooks
usesvmq_webhooks.pool_max_connections
andvmq_webhooks.pool_timeout
(#621).session show
options (peer_host
,peer_port
) to not work for websocket clients (#542).make rpi-32
).listener.tcp.allowed_protocol_versions = [3,4]
on the transport level orlistener.tcp.specific_listener.allowed_protocol_versions
.vmq-admin cluster leave
isxmerl
and inets
from the Erlang standard library to the release in ordergraphie_api_key
-> graphite_api_key
) preventing thevernemq.conf
file.disconnect_by_subscriber_id/2
API.Published by larshesel over 6 years ago
vmq-admin cluster leave
isvmq_passwd
due to openssl headers not found.make rpi-32
).Published by larshesel over 6 years ago
session show
options (peer_host
,peer_port
) to not work for websocket clients (#542).Published by larshesel over 6 years ago
Add proxy_protocol_use_cn_as_username
feature which for proxy_protocol
enabled listeners enable or disable using the common name forwarded by the
PROXY protocol instead of the MQTT username. To ensure backward compatibility
this setting is enabled by default. This feature was kindly contributed by
SoftAtHome (https://softathome.com/).
New vmq-admin
command to forcefully disconnect and cleanup sessions.
Fix issue preventing ssl settings being inheritable on the listener level
(#583).
Fix issue where enqueuing data to a queue on a remote cluster node could cause
the calling process to be blocked for a long time in case of the remote
cluster node being overloaded or if a net-split has occurred.
This issue can occur while delivering a shared subscriber message to a remote
subscriber in the cluster (blocking the publishing client) or when migrating
queue data to to another node in the cluster. In the case of shared
subscribers a new (hidden) configuration parameter
(shared_subscription_timeout_action
) has been added which decides which
action to take if enqueuing on a remote note times out waiting for the
receiving node to acknowledge the message. The possibilities are to either
ignore
the timeout or requeue
the message. Ignoring the timeout can
potentially lead to losing the message if the message was still in flight
between the two nodes and the connection was lost due to a
net-split. Requeueing may lead to the same message being delivered twice if
the original client received the message, but the acknowledgement was lost.
Fix typo in configuration name plumtree.outstandind_limit
should be
plumtree.outstanding_limit
.
Make the vmq_cluster_node
processes able to handle system messages to make
it easier inspect the process behaviour at run-time.
Fix bug preventing use_identity_as_username
from working on WSS sockets
(#563).
Published by larshesel almost 7 years ago
listener.vmq.clustering
is not reachable or alistener.tcp.proxy_protocol = on
) being inherited by specific listeners (#516).vmq_webhooks
plugin when the plugin is beingvmq_reg_sup
log statements.vmq-admin session show
query as this can lead to a timeout.Published by dergraf almost 7 years ago
vmq-admin session show
results. Note msg_ref
filtering is currently broken.Published by larshesel almost 7 years ago
vmq_ql_query
handler.peer_host
can always be retrieved via the HTTP API. It wasvmq-admin session show
vernemq_dev
./api/v1/sessions
mapped tosession list
which is deprecated for session show
.max-age
parse issue in vmq_webhooks
(#527).