Habari STOMP Client libraries 10.3: release candidate 1 available

The first release candidate of version 10.3 of the Habari STOMP Client libraries for Delphi and Free Pascal is now available for ActiveMQ, Artemis, OpenMQ and RabbitMQ. Version 10.3 brings asynchronous receive to the simplified API, fixes several defects around message listeners, heart-beats and receiving, runs on Linux again with Free Pascal, and comes with a reworked Getting Started guide. Please try it with your projects and let us know what you find before the final release in December.

New

  • Message listeners on the simplified API. IMQConsumer has a MessageListener property, so consumers created with IMQContext.CreateConsumer can receive messages asynchronously (with HABARI_BROKEN_MESSAGELISTENER defined, Indy connection only).
  • Line length and failover on the context. IMQContext supports IMaxLineLength and IFailoverProtocol, so users of the simplified API can set the maximum line length and use failover: URLs.
  • New demos. HabariChatRooms (several chat rooms on one context, each with its own listener), BankEventLog for RabbitMQ streams (runs without a broker in its in-memory mode), and XPathSelector for ActiveMQ and Artemis.
  • Getting Started guide. New layout in five parts, new chapters “Broker differences” and “Asynchronous receive (IMessageListener)”, a “Streams” section for RabbitMQ, an XPath selector section for ActiveMQ and Artemis, and an updated OpenMQ quick start for OpenMQ 6.9.0. A new chapter lists the optional STOMP 1.2 features the library does not implement, and the chapters on map and object messages now match the code, with examples. The RabbitMQ quorum queue example now sets the queue type (without it, RabbitMQ 4 dropped the message), and the ActiveMQ section on numeric selectors no longer recommends a prefix that makes the selector invalid. The tutorials now use the simplified API.

Fixed

  • Heart-beats: CheckHeartbeat no longer reports “Heartbeat too late” on an idle connection.
  • Receive with a time-out no longer returns nil early when the broker sends an empty line (a heart-beat) before a message, and no longer blocks longer than its time-out.
  • Receive when the broker closes the connection now raises an exception with all three connection types. Before, it could loop at full CPU load (Indy) or keep returning nil (Synapse, mORMot 2).
  • Free Pascal on Linux: the library compiles and runs again with all three connection types.
  • Artemis: IMessageListener now receives messages.
  • Artemis and OpenMQ: an Acknowledge in a transacted session now sends the transaction header.
  • Forwarding a received message no longer makes the receiving client reject it with “unexpected subscription id”.
  • With HABARI_BROKEN_MESSAGELISTENER defined, synchronous Receive behaves as without it, and creating or closing consumers and sessions while a listener runs is now safe.
  • Synapse and mORMot 2 connections: setting a message listener raises a clear EIllegalStateException instead of an access violation.
  • Demos: HabariChat no longer blocks its user interface, and several other demos were fixed.

Please note

  • RabbitMQ: CreateTemporaryTopic now raises “Feature not supported” at once, on the session and on IMQContext. RabbitMQ has temporary queues only; before, the returned topic failed on first use. Use CreateTemporaryQueue for reply destinations.
  • The HABARI_X_MAXLINELENGTH and HABARI_ENABLE_FAILOVER_PROTOCOL defines will be removed in the next release. Both now show a compiler warning that names the replacement property.
  • The HABARI_BROKEN_MESSAGELISTENER define will be removed in a future release, and the listener code will then always be compiled in. IMessageListener itself is not deprecated.
  • The units BTThread and BTStompReadThreadIndy moved from source/optional to source. If a project names these units with their old path, change it. Classes that implement IMQConsumer themselves need the two new MessageListener methods when HABARI_BROKEN_MESSAGELISTENER is defined. Apart from this, 10.3 has no breaking changes.
  • Known issues: on OpenMQ, don’t receive in a transacted session; the broker never acknowledges such messages, so use client acknowledgement instead. With receipts enabled, a message that arrives for a consumer on the same connection while the client waits for the receipt is lost. With HABARI_BROKEN_MESSAGELISTENER defined, closing a connection can hang in rare cases. RabbitMQ streams have two limitations, one of them seen only with RabbitMQ 4.3.x. All of them are described in the release notes and the guide.
  • This is a release candidate, so please don’t use it in production yet.

Tested with ActiveMQ 6.3.2 and 6.4.0, Artemis 2.57.0, OpenMQ 6.9.0, RabbitMQ 4.4.0 and Indy 10.6.3.15.

The full release notes are at https://www.habarisoft.com/release_notes.html#r2026.12.

How to get it: registered users can download the release candidate from the usual download area now; the product pages at https://www.habarisoft.com/ link to it.

Feedback: please send reports and questions to info@habarisoft.com by 26 November 2026, so we can include fixes in the final release.

Visited 1 times, 1 visit(s) today