Known Limitations
This page describes concerns and limitations that should be considered when allocating resources to a9s Messaging plans, as well as other known issues.
Caveats regarding Backups
When creating a backup for a9s Messaging, please note that only the queue definitions are stored. The actual messages within the queues are not saved, as this service is designed for non-persistent queues.
When restoring a backup, any missing queues will be added to the service. Meanwhile, the existing queues and their corresponding data, that existed before the backup was created, will be preserved.
Object Size Limit
a9s Messaging's underlying RabbitMQ service has a hard limit of 16 MiB for object sizes, however, publishing messages anywhere near that size is discouraged if there is uncertainty over the Virtual Machine's available resources being large enough to handle it. The reason behind this is that if the VM is not big enough, such messages may cause the underlying service to misbehave when the usage reaches a level comparable to the available resources. This happens because any message of a size close to it pins massive RAM in every queue, multiplies disk I/O, and can block connections long enough to trigger false fail-overs. Therefore, sluggish, or even briefly unavailable, Service Instances will be noticeable well below the limit. For more information, please check RabbitMQ limits documentation.
Quorum Queue Delivery Limit
Starting with RabbitMQ 4.3, quorum queues no longer have a default delivery_limit. In previous versions, the default
was 20, meaning messages that were rejected and requeued more than 20 times would be dropped (or dead-lettered, if a
dead-letter exchange was configured).
With the default limit removed, messages that are repeatedly rejected and requeued will be redelivered indefinitely. This can lead to stuck consumers or excessive resource usage if the application does not handle poison messages properly.
It is strongly recommended to set an explicit delivery-limit via a policy or as a queue argument on all quorum queues.
Consumer Timeout and Classic Queues
Starting with RabbitMQ 4.3, the consumer_timeout setting is no longer evaluated for classic queues. This means
consumers of classic queues that hold messages without acknowledgement will no longer be automatically disconnected
after the configured timeout period.
Applications that relied on the consumer timeout to detect and disconnect stalled consumers on classic queues should implement their own timeout logic, or consider migrating to quorum queues, where consumer timeouts are still enforced.
The consumer_timeout custom parameter continues to apply to quorum queues and streams.
Deprecated Features
Starting with RabbitMQ 4.3, several features were deprecated. They will continue to work for RabbitMQ 4.3, but they will probably get removed in the next Minor Update (f.e. RabbitMQ 4.4). The applications should already be checked and adapted if necessary before the next update.
The following features are deprecated and will be removed in the near future:
global_qos:basic.qoswithglobal=trueis rejected. Use per-consumer prefetch instead.transient_nonexcl_queues: Non-exclusive transient (non-durable) queues can no longer be declared. Existing transient queues will be deleted during the future upgrades of RabbitMQ.queue_master_locator: Thex-queue-master-locatorqueue argument andqueue-master-locatorpolicy key are rejected. Usex-queue-leader-locatorandqueue-leader-locatorinstead.amqp_address_v1: The AMQP 1.0 address format v1 will be rejected. Use address format v2.