Skip to content

Releases: hivemq/hivemq-mqtt-client

1.3.0

02 Dec 09:57

Choose a tag to compare

🌟 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

08 Apr 20:42
ccb9b01

Choose a tag to compare

🐞 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

  • Direct publishing to Maven Central #478
  • Improved Gradle build files #446 #478

❤️ 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

09 Aug 14:41
3f1c055

Choose a tag to compare

🐞 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

  • Improved Gradle build files #420
  • Cleaned up annotation placement for nested classes #426

❤️ Thanks to all contributors

  • @SgtSilvio
  • Also thanks to all code reviewers and all who created valuable issues

Related blog post:

1.2.0

21 Apr 18:56
d94dfce

Choose a tag to compare

🌟 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
    • 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

✨ 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 integrations
    • hivemq-mqtt-client: Base dependency
    • hivemq-mqtt-client-websocket: Adds dependencies for the WebSocket transport
    • hivemq-mqtt-client-proxy: Adds dependencies for the proxy transport
    • hivemq-mqtt-client-epoll: Adds dependencies for the native epoll socket implementation
    • hivemq-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 with MqttClientReconnector.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 artifacts hivemq-mqtt-client, hivemq-mqtt-client-websocket, and hivemq-mqtt-client-epoll
    If you use the WebSocket transport or the native epoll socket implementation, please specify the additional dependencies

❤️ Thanks to all contributors

Related blog post: https://www.hivemq.com/blog/hivemq-mqtt-client-1-2-0-released/

1.1.4

02 Mar 15:01
4f5f3f6

Choose a tag to compare

🐞 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 code UNSUPPORTED_PROTOCOL_VERSION instead of an MqttDecodeException #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

20 Nov 13:45
637aa02

Choose a tag to compare

🐞 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

  • Modularized build and added examples module #328 #337
    You can find the examples here

❤️ 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

09 Aug 15:20
e0c677f

Choose a tag to compare

🐞 Bug fixes

  • MQTT 3 clients do not get nested Mqtt5Exceptions anymore but Mqtt3Exceptions #316
  • Exceptions of async operations delivered by CompletableFuture are not wrapped in CompletionException 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/

1.1.1

09 Aug 07:54
f678684

Choose a tag to compare

This was released on 15 July. The date shown by GitHub is wrong.

🐞 Bug fixes

  • Removed wrongly logged error when the session expires and a SUBSCRIBE packet contained two or more subscriptions #295
  • MqttDisconnectedContext.getCause now returns Mqtt3...Exceptions for MQTT 3 clients #296

✨ Improvements

  • Enabled running in JEE 7 applications by disabling CDI bean discovery #300
  • Static allocated buffers respect the setting to not use direct buffers, for example on Android #311

🗒️ Misc

  • JitPack support (snapshot versions can now be obtained using JitPack) #289

❤️ Thanks to all contributors

Related blog post: https://www.hivemq.com/blog/hivemq-mqtt-client-1-1-1-released/

1.1.0

07 Jun 12:55
e7ffbed

Choose a tag to compare

🌟 Features

  • Reconnect Handling #83
    • Connected and Disconnected listeners
    • Automatic reconnect strategy (exponential backoff + random delays, customizable parameters)
    • Customizable reconnect handling (delay, reconnect when a future completes, alter Connect message, alter transport for high availability)
    • Resending of messages after reconnect (pending + queued, Publishes, Subscribes, Unsubscribes)
    • Setting Auth and Will publish on a client, not only on connect (reused during reconnect)

🐞 Bug fixes

  • Fixed mixed ordering of messages when publishing in a very high rate with the AsyncClient #283

⚠️ Behavioral changes

  • Rx3/5Client.publish(Flowable): if the session expires the Flowable is not cancelled anymore. Instead the individual publishes are errored. This is the expected behavior, cancelling may devour messages.

❤️ Thanks to all contributors

Related blog post: https://www.hivemq.com/blog/hivemq-mqtt-client-1-1-0-released/

1.0.1

16 Apr 14:34
fcf6e73

Choose a tag to compare

🐞 Bug fixes

  • Fixed an issue that caused message forwarding to stop in an edge case #257
  • Fixed thread-safety of MqttPublish.getPayloadAsBytes #259

✨ Improvements

  • Implemented equals and hashCode methods for configs and messages #256
  • Enabled handling of ConnectionFailedExceptions #263

🗒️ Misc

  • Automatic checking of binary and source compatibility #265

❤️ Thanks to all contributors

  • @SgtSilvio
  • Also thanks to all code reviewers and all who created valuable issues