1.2.0
🌟 Features
-
Manual message acknowledgement #304 #403
Use case: Ensure at least once delivery from the broker even if client applications crash- Selectively enable manual acknowledgement for specific streams
- Acknowledge messages that are emitted to multiple streams independently per stream
(the client aggregates the acknowledgments before sending MQTT acknowledgements) - Order of manual acknowledgment does not matter
(the client automatically ensures the order of MQTT acknowledgments for 100% compatibility with the MQTT specification)
-
New Reactor API #255 #388 #397
Use case: Easier integration into reactor applications -
Decoupled subscription/publishing lifecycles from connection/session lifecycles
-
Subscribe and unsubscribe operations can now be called irrespective of the current connection status (similar to the publishes operation) #398
Use case: Set up subscriptions before connecting the client -
Restore subscriptions automatically if the session expires and the client reconnects (enabled by default, configurable) #297 #398
Use case: Easier to build continuously-connected applications that need to maintain their subscriptions as long as the application is running (even in the edge case that the session expires) -
Republish pending and queued messages even if the session expires and the client reconnects (disabled by default, configurable) #288 #398
Use case: Easier to build continuously-connected applications that want to ensure at-least-once delivery to the broker (even in the edge case that the session expires)
-
-
New transport features:
-
Proxy support: SOCKS4, SOCKS5, HTTP CONNECT #81 #281 #364 #401
Use case: Tunnel the MQTT connection through a proxy -
Improved TLS support: #201 #401
- TLS Session Resumption
Use case: Consume less bandwidth and computing resources when reconnecting and resuming a TLS session - Hostname verification: Default is the same as HTTPS hostname verification, but can be customized
Usecase: Verify that you are communicating with the right broker
- TLS Session Resumption
-
Specify a WebSocket query string #335 #336
Usecase: Communicate with WebSocket endpoints that require a query string -
Specify the local bind address and/or port #308 #365
Use case: Support multiple network interfaces -
Configurable timeouts: #401
- Socket connect timeout
- MQTT connect timeout
- WebSocket handshake timeout
- Proxy handshake timeout
-
-
New bulk builder methods for consuming arrays, collections, or streams: #170 #290 #387
- User properties builder
addAll
- Subscribe builder
addSubscriptions
- Unsubscribe builder
addTopicFilters
- User properties builder
✨ Improvements
- Added
CheckReturnValue
annotation that enables IDE assistance to flag unused return values #385 - Javadoc and code style improvements #404 #406 #407
🗒️ Misc
- Modularization of artifacts #364
Reasoning: Keep required dependencies to a minimum, future releases might add more modules for diverse integrationshivemq-mqtt-client
: Base dependencyhivemq-mqtt-client-websocket
: Adds dependencies for the WebSocket transporthivemq-mqtt-client-proxy
: Adds dependencies for the proxy transporthivemq-mqtt-client-epoll
: Adds dependencies for the native epoll socket implementationhivemq-mqtt-client-reactor
: Reactor API for the HiveMQ MQTT Client
⚠️ Behavioral changes
-
By default, subscriptions are now automatically restored when the session expires and the client reconnects.
If desired, the default behavior can be disabled withMqttClientReconnector.resubscribeIfSessionExpired(false)
-
When TLS is used, HTTPS hostname verification is now performed by default, but can be customized with
MqttClientSslConfigBuilder.hostnameVerifier
-
The
hivemq-mqtt-client
artifact in version 1.1.4 and below is now modularized into the artifactshivemq-mqtt-client
,hivemq-mqtt-client-websocket
, andhivemq-mqtt-client-epoll
If you use the WebSocket transport or the native epoll socket implementation, please specify the additional dependencies
❤️ Thanks to all contributors
- @alsanrum
- @MicWalter
- @SgtSilvio
- Also thanks to all code reviewers and all who created valuable issues
Related blog post: https://www.hivemq.com/blog/hivemq-mqtt-client-1-2-0-released/