Summary
Audit the library and its integration tests for RabbitMQ 4.3 compatibility and remove the CI version pin.
Background
RabbitMQ 4.3.0 (release notes) advanced several deprecated features from permitted_by_default to denied_by_default. While reviewing #1913, CI against the default rabbitmq:management image (4.3 at the time of this writing) failed across roughly 20 integration tests with:
AMQP close-reason, initiated by Peer, code=541,
text='INTERNAL_ERROR - Feature `transient_nonexcl_queues` is deprecated.
By default, this feature is not permitted anymore.'
4.3 changes relevant to this client
From the 4.3 release notes, the deprecated-feature phase transitions and removals that can affect AMQP 0-9-1 clients:
transient_nonexcl_queues (denied by default): declaring a queue with durable=false, exclusive=false is rejected.
global_qos (denied by default): basic.qos with global=true is rejected.
queue_master_locator (denied by default): the x-queue-master-locator queue argument is rejected.
- CQv1 storage removed: queue arguments
x-queue-mode (any value) and x-queue-version=1 fail on 4.3.
amqp_address_v1 and amqp_filter_set_bug (denied by default) are AMQP 1.0 specific and do not apply to this 0-9-1 client.
Known hits in this repository
Library code:
projects/RabbitMQ.Client/Impl/AutorecoveringChannel.cs:181 calls BasicQosAsync(0, _prefetchCountGlobal, global: true, ...) during recovery. Any user who had configured a global-QoS prefetch before a disconnect will fail autorecovery on 4.3.
projects/RabbitMQ.Client/Headers.cs exposes public const string XQueueMode = "x-queue-mode" as part of the public API. Users who set this header against a 4.3 broker will fail queue declaration.
Tests:
- Several tests in
projects/Test/Integration/TestAsyncConsumer.cs (lines 218, 405, 495, 555 among others) declare queues with durable=false, exclusive=false, triggering transient_nonexcl_queues. This is not an exhaustive list; a repository-wide audit is needed.
- The repository should be grepped for
BasicQosAsync(..., true, ...), x-queue-master-locator, x-queue-mode, and x-queue-version to find additional cases.
Workaround in place
Commit 00e4d71 pins CI to RabbitMQ 4.2:
.ci/ubuntu/gha-setup.sh: use rabbitmq:4.2-management instead of rabbitmq:management.
.ci/windows/versions.json: pin to rabbitmq 4.2.6 + erlang 27.3.4.11.
This is a temporary unblocker.
Acceptance
- CI runs against the latest supported major RabbitMQ release (currently 4.3) on both Ubuntu and Windows.
- No tests rely on deprecated broker features that are denied by default on 4.3.
- Library code paths (notably
AutorecoveringChannel.BasicQosAsync with global: true) do not trigger denied_by_default deprecated features without explicit caller opt-in.
- Public API surfaces that correspond to removed features (e.g.
Headers.XQueueMode for CQv1) are documented as deprecated or marked [Obsolete] as appropriate.
- Commit 00e4d71 is reverted.
Related
Summary
Audit the library and its integration tests for RabbitMQ 4.3 compatibility and remove the CI version pin.
Background
RabbitMQ 4.3.0 (release notes) advanced several deprecated features from
permitted_by_defaulttodenied_by_default. While reviewing #1913, CI against the defaultrabbitmq:managementimage (4.3 at the time of this writing) failed across roughly 20 integration tests with:4.3 changes relevant to this client
From the 4.3 release notes, the deprecated-feature phase transitions and removals that can affect AMQP 0-9-1 clients:
transient_nonexcl_queues(denied by default): declaring a queue withdurable=false, exclusive=falseis rejected.global_qos(denied by default):basic.qoswithglobal=trueis rejected.queue_master_locator(denied by default): thex-queue-master-locatorqueue argument is rejected.x-queue-mode(any value) andx-queue-version=1fail on 4.3.amqp_address_v1andamqp_filter_set_bug(denied by default) are AMQP 1.0 specific and do not apply to this 0-9-1 client.Known hits in this repository
Library code:
projects/RabbitMQ.Client/Impl/AutorecoveringChannel.cs:181callsBasicQosAsync(0, _prefetchCountGlobal, global: true, ...)during recovery. Any user who had configured a global-QoS prefetch before a disconnect will fail autorecovery on 4.3.projects/RabbitMQ.Client/Headers.csexposespublic const string XQueueMode = "x-queue-mode"as part of the public API. Users who set this header against a 4.3 broker will fail queue declaration.Tests:
projects/Test/Integration/TestAsyncConsumer.cs(lines 218, 405, 495, 555 among others) declare queues withdurable=false, exclusive=false, triggeringtransient_nonexcl_queues. This is not an exhaustive list; a repository-wide audit is needed.BasicQosAsync(..., true, ...),x-queue-master-locator,x-queue-mode, andx-queue-versionto find additional cases.Workaround in place
Commit 00e4d71 pins CI to RabbitMQ 4.2:
.ci/ubuntu/gha-setup.sh: userabbitmq:4.2-managementinstead ofrabbitmq:management..ci/windows/versions.json: pin torabbitmq 4.2.6+erlang 27.3.4.11.This is a temporary unblocker.
Acceptance
AutorecoveringChannel.BasicQosAsyncwithglobal: true) do not triggerdenied_by_defaultdeprecated features without explicit caller opt-in.Headers.XQueueModefor CQv1) are documented as deprecated or marked[Obsolete]as appropriate.Related