Skip to content

Releases: cloudamqp/lavinmq

v2.5.2

12 Nov 10:36

Choose a tag to compare

Fixed

  • Prevent MFile leakage in clustering when follower disconnects #1450
  • Don't keep FDs open for MFiles #1428
  • Signal empty after purge all in Priority queue message store #1442
  • Only render exchange info once #1447
  • Add tooltips to exchange features #1448
  • Remove NoopServer from Clustering::Server #1457
  • GUI: Navigate between exchanges #1454

v2.5.1

05 Nov 16:18

Choose a tag to compare

This patch release contains some important bugfixes.

Fixed

  • Boolean queue arguments validated as invalid if set to false #1429
  • Use the correct path for meta files in streams #1438
  • Remove meta files when segments are removed in streams #1435
  • Consumers would get stuck trying to consume from priority queues #1440

v2.5.0

04 Nov 16:55

Choose a tag to compare

LavinMQ 2.5.0 Release Notes

This release focuses on performance improvements, clustering enhancements, and better user experience. This release includes several optimizations that make LavinMQ faster to start, faster to replicate, and easier to use.

Release Highlights

Faster Startups (Meta Files)

LavinMQ now stores message counts in meta files alongside each message segment. Startup times are dramatically reduced, especially if you have large queues or many queues. This change is particularly noticeable on systems with lots of messages. #1163

Faster Cluster Synchronization

Cluster followers now synchronize with the leader much faster thanks to file checksum caching. Checksums are now cached and reused, reducing the time it takes for a follower to catch up or for a new node to join a cluster. This means less downtime during cluster operations and faster recovery scenarios. #1088

Better UI Navigation

The web interface has received a major refresh:

  • Light mode - You can now switch between dark and light themes 46b00e4c
  • New sidebar menu - reorganized with icons and logical groupings for easier navigation #1268
  • Updated log view - sticky headers make it easier to browse logs #1333, and you can now search tables as you type #1274
  • Various small improvements to forms, tables, and responsive design

MQTT 3.1.0 Support

We've added support for MQTT 3.1.0 protocol alongside the existing 3.1.1 support.

Breaking Changes

Metrics - messages_ready, messages_unacknowledged

Queue metrics have been renamed for consistency:

  • readymessages_ready
  • ready_bytesmessage_bytes_ready
  • unackedmessages_unacknowledged
  • unacked_bytesmessage_bytes_unacknowledged

The old names still work in 2.5.0 but will be removed in 3.0.0. #1121

Important Bugfixes

Topic Exchange Routing

Fixed a bug where topic exchanges sometimes didn't route messages properly when using wildcard routing keys. #1300

MQTT Client Reconnection with Unacked Messages

MQTT clients with unacknowledged messages were sometimes blocked from reconnecting. The fix ensures clients can always reconnect. #1102

Dead Letter Loop Prevention

Fixed a bug that could cause messages to loop infinitely between queues via dead letter exchanges. #1244

Delayed Exchange x-cache-ttl Bug

When using delayed exchanges with deduplication, the x-cache-ttl header was incorrectly reset when messages expired if the ttl and delay was the same. This prevents that from occuring. #1161

Changes Worth Mentioning

lavinmqperf MQTT Support

The lavinmqperf benchmarking tool now supports MQTT. This lets you performance test and stress test your MQTT workloads using the same tooling you use for AMQP. #983

etcd - Support for Basic Auth

Clustering via etcd now supports basic authentication and HTTPS connections. #1212

MQTT Client Permissions

Adds permission checks for publishing and subscribing with MQTT clients. When an MQTT client publishes to a topic, LavinMQ checks write permissions; when subscribing, it checks read/write permissions. #1275

Alpine Linux Support

Adds better support for Alpine Linux. #1115

Shovels Can Now Be Paused and Resumed

You can now pause and resume shovels via the API and UI without deleting and recreating them. The paused state persists across restarts. #1103

Crystal 1.18.0 Compatibility

LavinMQ now builds with Crystal 1.18.0. If you're building from source, make sure to update your Crystal installation. #1356, #1360

Prometheus Metrics on Separate Port

You can now serve Prometheus metrics on a separate port from the main management API. This allows you to expose /metrics for scraping without requiring authentication, while keeping the management API secured. #1217

Followers Serve Their Own /metrics

Follower nodes now serve their own metrics instead of proxying to the leader, making it possible to gather metrics for all nodes in a cluster. #1217

Fairer Message Distribution

Messages are now distributed more fairly among consumers connected to the same queue. Previously, depending on timing and network conditions, some consumers could receive a disproportionate share of messages. The improved algorithm ensures all consumers get a more balanced workload, leading to better throughput and resource utilization. #1173

Federation Respects max-hops

Federation links now properly respect the max-hops parameter. This prevents messages from bouncing between federated clusters indefinitely. #1130


For the full list of changes, see the changelog.

v2.5.0-rc.7

03 Nov 10:42

Choose a tag to compare

v2.5.0-rc.7 Pre-release
Pre-release

Fixed

  • Fixed a bug where LavinMQ could end up in an infinte loop in a priority queue #1420
  • Remove meta files after priority queue store migration #1421
  • Show all channels for a specific vhost in the GUI #1413
  • Don't log 'NaN' during follower sync if bps is 0 #1418
  • Fixed a flaky spec #1383
  • Add builds for Debian 13 & Fedora 43. Remove builds for Fedora 40 #1410

v2.5.0-rc6

30 Oct 10:43

Choose a tag to compare

v2.5.0-rc6 Pre-release
Pre-release

Fixed

  • Reset segment pos before producing metadata #1417

2.5.0-rc.5

30 Oct 10:20

Choose a tag to compare

2.5.0-rc.5 Pre-release
Pre-release

Fixed

  • Remove leftover apostrophe after refactoring #1415
  • Don't crash when reading metadata #1416
  • Fix x-max-age not showing as effective argument for stream queues in UI #1389
  • Add x-hash-on to effective_arguments for Consistent Hash Exchange #1405
  • Bugfix: mismatch between ids in view and script #1409
  • Exchange view will auto refresh data #1399
  • Handle AMQPLAIN authentication without required keys 035b8fdf
  • Respect --pmessages/--cmessages also for multiple publishers/consumers in lavinmqperf 03604792
  • Only include livereload.js if flag livereloadjs is set #1411

v2.5.0-rc.4

27 Oct 14:00

Choose a tag to compare

v2.5.0-rc.4 Pre-release
Pre-release

Fixed

  • Stream Basic Get responses over HTTP API c1b8ec3
  • Fixed a bug where stream consumers sometimes did not flush messages to socket #1385
  • Log Info instead of Warning on passive declare #1384
  • Log which user is being denied permission #1392

v2.4.5

22 Oct 13:34

Choose a tag to compare

Fixed

v2.5.0-rc.3

21 Oct 08:18

Choose a tag to compare

v2.5.0-rc.3 Pre-release
Pre-release

Added

  • MQTT client now uses permissions to authorize write operations on publish and read/write operations on subscribe #1275

Changed

  • Crystal 1.18.0 compatibility #1356, #1360
  • Sticky header on logs page #1333
  • Less scary logging if cleaning up upstream resources fails #1379

Fixed

  • UI sorting bugs #1374
  • Don't delete shovel with DeleteAfter::QueueLength when pausing it #1376
  • Federations: Use correct variable to prevent channel error and reconnect #1378
  • Right-aligned columns display in UI tables 97f093e
  • Close metrics_server on clustering client close #1367 & #1380
  • Replicate meta files in clustering #1365
  • Use the right counters for lavinmq_global_messages_delivered_total #1358

v2.5.0-rc.2

14 Oct 09:12

Choose a tag to compare

v2.5.0-rc.2 Pre-release
Pre-release

Added

  • Human friendly exchange type names in controller and exchanges.js #1238
  • Icons added to sidebar navigation and divided sidebar into groups #1268
  • Table filter: search as you type functionality #1274
  • Read messages from stream #1236
  • Support Basic Auth and HTTPS for etcd endpoints #1212
  • Add checksum verification for JavaScript dependencies #1257

Changed

  • Use paused instead of .paused as filename for paused queues #1209
  • Use eventListener consistently across JS #1220
  • Prometheus metrics can nowbe served on a different port to allow unauthenticated requests for metrics #1217
  • Followers no longer forward requests to the unauthenticated /metrics to leader and instead show their own metrics #1217
  • Rename message segment meta files to meta.SEGMENT #1343
  • Switch from slash to chevron right in title bar breadcrumbs #1334

Fixed

  • list_connections: don't fail on missing key #1226
  • Fixed bug where proxying from a follower that is performing full sync does not work #1283
  • Fix condition if follower should be written to ISR #1341
  • Manage shovels on streams in the GUI #1337
  • API endpoint should accept empty/no body #1338
  • Don't double requeue messages on delivery failure #1344
  • Topic exchange doesn't route messages properly #1300
  • Specs should fail on closed queues #1339
  • Fix for sidebar icons light and dark mode #1329
  • Don't allow deletion of default (amq.x / mqtt.x) exchanges #1321
  • Allow deleting internal exchange via HTTP #1319
  • Make sure unused segments are properly deleted #1297
  • Don't return empty messages from first? and shift? #1298
  • Fix segfault in purge_all #1289
  • Always decode path params #1273
  • Move initialization of some BoolChannel to prevent leaks #1263
  • Fix some UI bugs in shovels: handle src and dest as arrays, properly display src-exchange, properly show paused/resume state #1265
  • Fixed a raise condition in MFile#close 816bfb3
  • Reject unacked messages on error when getting messages via HTTP #1349
  • Added missing documentation #1304 & #1306