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.
IMQConsumerhas aMessageListenerproperty, so consumers created withIMQContext.CreateConsumercan receive messages asynchronously (withHABARI_BROKEN_MESSAGELISTENERdefined, Indy connection only). - Line length and failover on the context.
IMQContextsupportsIMaxLineLengthandIFailoverProtocol, so users of the simplified API can set the maximum line length and usefailover: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:
CheckHeartbeatno longer reports “Heartbeat too late” on an idle connection. Receivewith 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.Receivewhen 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:
IMessageListenernow receives messages. - Artemis and OpenMQ: an
Acknowledgein 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_MESSAGELISTENERdefined, synchronousReceivebehaves 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
EIllegalStateExceptioninstead of an access violation. - Demos: HabariChat no longer blocks its user interface, and several other demos were fixed.
Please note
- RabbitMQ:
CreateTemporaryTopicnow raises “Feature not supported” at once, on the session and onIMQContext. RabbitMQ has temporary queues only; before, the returned topic failed on first use. UseCreateTemporaryQueuefor reply destinations. - The
HABARI_X_MAXLINELENGTHandHABARI_ENABLE_FAILOVER_PROTOCOLdefines will be removed in the next release. Both now show a compiler warning that names the replacement property. - The
HABARI_BROKEN_MESSAGELISTENERdefine will be removed in a future release, and the listener code will then always be compiled in.IMessageListeneritself is not deprecated. - The units
BTThreadandBTStompReadThreadIndymoved fromsource/optionaltosource. If a project names these units with their old path, change it. Classes that implementIMQConsumerthemselves need the two newMessageListenermethods whenHABARI_BROKEN_MESSAGELISTENERis 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_MESSAGELISTENERdefined, 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.