Releases: hivemq/hivemq-mqtt-client
1.3.3
1.3.2
What's Changed
- Add reasonCode to PubComp, PubRel, PubRec and PubAck by @LukasBrand in #591
New Contributors
- @LukasBrand made their first contribution in #591
Full Changelog: v1.3.1...v1.3.2
1.3.1
What's Changed
- Updated Repository Confirmation & Issue Templates by @pglombardo in #559
- Added custom http headers to MqttWebSocket by @hctemmel in #500
- Dependency Updates by @pglombardo in #567
- Bump version to 1.3.1 by @pglombardo in #570
New Contributors
Full Changelog: v1.3.0...v1.3.1
1.3.0
🌟 Features
- Added the ability to define restrictions for the MQTT 3 API #512
🗒️ Miscellaneous
- Improved Javadoc
- Improved Build and Release Infrastructure
❤️ Thanks to all contributors
- @SgtSilvio
- @YannickWeber
- Also thanks to all code reviewers and all who created valuable issues
Related blog post: https://www.hivemq.com/blog/hivemq-mqtt-client-1-3-0-released/
1.2.2
🐞 Bug fixes
- Fixed that a failure to shutdown the netty event loop leaves bad executor in cache #445
- Fixed that threads are not terminated when using manual acknowledgement with QoS 0 #462
- The client always reads the DISCONNECT message even if the server closes the connection while the client sends data #466
- SSLExceptions and ProxyConnectExceptions are not logged unnecessarily when they are handled correctly #468
🗒️ Misc
❤️ Thanks to all contributors
- @MicWalter
- @SgtSilvio
- @YannickWeber
- 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-2-released/
1.2.1
🐞 Bug fixes
- Fixed
subList
operation on returned immutable lists #417 - Avoid resending PUBACK and PUBREC on new connections #428
- Root multi level wildcards are correctly restored by automatic resubscribe #436
🗒️ Misc
❤️ Thanks to all contributors
- @SgtSilvio
- Also thanks to all code reviewers and all who created valuable issues
Related blog post:
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/
1.1.4
🐞 Bug fixes
- Adjusts QoS 2 handling to prevent possible disconnect/reconnect loops when PUBREL packets are resent #377
- Ensures that event loops are always released to eliminate an issue that some threads unnecessarily remain active in rare cases (hostname not found and reconnect disabled) #356
- Automatically validates the Will payload maximum of 65,535 bytes to provide better feedback and decrease errors. #354 #355
✨ Improvements
- Further optimization of memory usage, a client instance now only uses around 5 kB #370
- Improved
TopicAliasAutoMapping
for better utilization of topic aliases #370 - Reduced flush calls for many small messages for better utilization of MTU size #370
- Small improvements for enhanced authentication handling #358
- Also ping when no message has been read for the keep alive time #357
- No I/O exceptions are logged while disconnecting when the server sends an RST instead of a FIN flag #374
- Connecting to an MQTT 3 only broker with MQTT 5 now returns an
Mqtt5ConnAck
with reason codeUNSUPPORTED_PROTOCOL_VERSION
instead of anMqttDecodeException
#327 - Added Javadoc for reason codes and other enums #371
🗒️ Misc
- Improved Gradle build files #363
- Improved test coverage #372
- New users section in the readme and documentation. #362
If you use the HiveMQ MQTT Client in a project that is not listed in the new section, feel free to open an issue or pull request.
❤️ Thanks to all contributors
- @LukasHiveMQ
- @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-1-4-released/
1.1.3
🐞 Bug fixes
- Avoid possible stack overflow when using topic filters with a large number of levels (4000+) #334 #338
✨ Improvements
- TLS Server Name Indication (SNI) support #331 #333
- Client now updates its session expiry interval when it is set in a disconnect message #329
- Client event loop threads can be easier determined by the name prefix
com.hivemq.client.mqtt
#330 - The dependency
netty-transport-native-epoll
is now optional and can be excluded if not needed #330 - Externally created netty event loops can now be passed to the executor config #330
🗒️ Misc
❤️ Thanks to all contributors
- @dajudge
- @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-1-3-released/
1.1.2
🐞 Bug fixes
- MQTT 3 clients do not get nested
Mqtt5Exception
s anymore butMqtt3Exception
s #316 - Exceptions of async operations delivered by
CompletableFuture
are not wrapped inCompletionException
anymore consistently #320
✨ Improvements
- Enabled using the HiveMQ MQTT Client as Java module and OSGi module #269
❤️ Thanks to all contributors
- @J-N-K
- @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-1-2-released/