When upgrading the Tanzu RabbitMQ tile from version 2.4.x to 10.x (RabbitMQ 4.0.x), the upgrade-all-service-instances errand or manual service instance updates may fail with the following error in the startup_stderr.log:
BOOT FAILED: {error, {failed_to_deny_deprecated_features, [classic_queue_mirroring]}}
This occurs because Tanzu RabbitMQ 10.x removes support for Classic Mirrored Queues. Any existing mirroring policies or mirrored queues will prevent the RabbitMQ node from starting.
Spring Cloud Data Flow (SCDF) instances often use Classic Mirrored Queues for high availability. In RabbitMQ 4.0 (included in Tanzu RabbitMQ tile 10.x), mirroring has been removed. Users must migrate these queues to Quorum Queues to maintain high availability or revert them to non-replicated classic queues.
To ensure a zero-data-loss migration and maintain high availability, follow these steps to migrate SCDF backing queues to Quorum Queues before upgrading the tile.
rabbitmqctl export_definitions /path/to/definitions.json.Review the commands before running them:
rabbitmq-diagnostics list_vhosts
rabbitmq-diagnostics list_queues --vhost <vhost_name>
rabbitmq-diagnostics list_policies --vhost <vhost_name>
Or via the VMware Tanzu RabbitMQ dashboard URL.
Identify any policies containing ha-mode, ha-params, or ha-sync-mode.
This command will make changes to your system. Review it carefully before running:
rabbitmqctl clear_policy [-p vhost] <policy_name>
# OR
rabbitmqctl -q remove_classic_queue_mirroring_from_policies
Or via the VMware Tanzu RabbitMQ dashboard URL.
This command cannot be undone. Verify every parameter before running:
# Use the Management UI or rabbitmqadmin to delete the existing classic queues associated with the streams.
rabbitmqadmin --vhost="vhost-name" delete queue name="queue-name"
Or via the VMware Tanzu RabbitMQ dashboard URL.
For Pre-package application redeploy the streams using the quorum.enabled=true property to ensure the new queues are created as Quorum Queues.
Review this command before running it:
stream deploy <my-stream> \
--properties "app.*.spring.cloud.stream.rabbit.bindings.input.consumer.quorum.enabled=true, \
app.*.spring.cloud.stream.rabbit.bindings.output.producer.quorum.enabled=true"
note: These properties can alternatively be managed via a Config Server
For custom streams with explicit queue creation, see Implementing VMware Tanzu RabbitMQ Quorum Queues in Spring AMQP
rabbitmq-diagnostics list_queues.