## RabbitMQ 4.3.1

RabbitMQ `4.3.1` is a maintenance release in the `4.3.x` [release series](https://www.rabbitmq.com/release-information).

It is **strongly recommended** that you read [4.3.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0)
in detail if upgrading from a version prior to `4.3.0`.

### Minimum Supported Erlang Version

[RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ.

Nodes **will fail to start** on older Erlang releases.


## Changes Worth Mentioning

Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.3.x/release-notes).

### Core Server

#### Bug Fixes

 * If a queue was bound to a topic exchange using an empty binding key (`""`),
   messages published to **any** topic exchange with an empty
   routing key would be incorrectly routed to that queue.

   To apply the fix, enable the new `topic_binding_projection_v5` feature flag after upgrading all cluster nodes.

   GitHub issue: [#16271](https://github.com/rabbitmq/rabbitmq-server/pull/16271)

 * A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios.

   GitHub issue: [#16422](https://github.com/rabbitmq/rabbitmq-server/pull/16422)

 * Passive queue and exchange declarations are now allowed for users that have **any** permission
   on the virtual host (`configure`, `write`, or `read`), not only `configure`.

   GitHub issues: [#16272](https://github.com/rabbitmq/rabbitmq-server/pull/16272), [#16085](https://github.com/rabbitmq/rabbitmq-server/pull/16085)

 * Classic queue shared message store GC could fall behind other queue activity under heavy load

   GitHub issues: [#16142](https://github.com/rabbitmq/rabbitmq-server/pull/16142), [#16141](https://github.com/rabbitmq/rabbitmq-server/issues/16141)

 * Classic queue message store: garbage collection is now stopped cleanly during node shutdown.

   GitHub issue: [#15498](https://github.com/rabbitmq/rabbitmq-server/pull/15498)

 * Quorum queues now gracefully handle negative priority values.

   GitHub issue: [#16280](https://github.com/rabbitmq/rabbitmq-server/pull/16280)

 * Quorum queues: delayed retry-related policy keys are now accepted in policy definitions.

   GitHub issues: [#16395](https://github.com/rabbitmq/rabbitmq-server/pull/16395), [#16398](https://github.com/rabbitmq/rabbitmq-server/pull/16398)

 * Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to
   the wrong member (replica).

   GitHub issue: [#16203](https://github.com/rabbitmq/rabbitmq-server/pull/16203)

 * Quorum queues: reintroduced Raft WAL max entries default of 500K.

   GitHub issue: [#16382](https://github.com/rabbitmq/rabbitmq-server/pull/16382)

 * A quorum queue could crash during recovery after an unclean shutdown

   PR: [rabbitmq/ra#629](https://github.com/rabbitmq/ra/pull/629)

 * Stream queue argument validation was improved.

   GitHub issue: [#16285](https://github.com/rabbitmq/rabbitmq-server/pull/16285)


#### Enhancements

 * `channel_max` was renamed to `max_channels` in `rabbitmq.conf`. The original name is
   still supported as an alias.

   GitHub issue: [#16347](https://github.com/rabbitmq/rabbitmq-server/pull/16347)

 * `connection_max` was renamed to `max_connections` in `rabbitmq.conf`. The original name is
   still supported as an alias.

   GitHub issue: [#16347](https://github.com/rabbitmq/rabbitmq-server/pull/16347)

 * The per-node `max_connections` limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones.

   GitHub issue: [#16300](https://github.com/rabbitmq/rabbitmq-server/pull/16300)

 * When a plain-text client connects to a TLS listener (or vice versa) for
   AMQP 0-9-1, MQTT, STOMP, and the Stream protocol, target node will log a more useful message.

   GitHub issues: [#16342](https://github.com/rabbitmq/rabbitmq-server/pull/16342), [#16344](https://github.com/rabbitmq/rabbitmq-server/pull/16344)

 * The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks.

   GitHub issue: [#16274](https://github.com/rabbitmq/rabbitmq-server/pull/16274)


### Stream Plugin

#### Bug Fixes

 * Stream protocol: an `open` frame with empty properties is now handled correctly.

   GitHub issue: [#16341](https://github.com/rabbitmq/rabbitmq-server/pull/16341)

#### Enhancements

 * It is now possible to cap the maximum number of concurrent Stream Protocol client
   connections using the `stream.max_connections` configuration key in `rabbitmq.conf`.

   GitHub issue: [#16341](https://github.com/rabbitmq/rabbitmq-server/pull/16341)


### Management Plugin

#### Bug Fixes

 * HTTP API `GET /api/connections` could return a 500 response when STOMP connections were present.

   GitHub issue: [#16435](https://github.com/rabbitmq/rabbitmq-server/pull/16435)

#### Enhancements

 * It is now possible to cap the maximum number of concurrent HTTP API connections using the `management.tcp.max_connections`,
   `management.ssl.max_connections` configuration keys in `rabbitmq.conf`.

   GitHub issue: [#16407](https://github.com/rabbitmq/rabbitmq-server/pull/16407)

 * The peer (client) certificate serial number is now exposed in the management UI and select CLI commands.

   GitHub issue: [#16463](https://github.com/rabbitmq/rabbitmq-server/pull/16463)

### Prometheus Plugin

#### Enhancements

 * It is now possible to cap the maximum number of concurrent HTTP API connections using the `prometheus.tcp.max_connections`,
   `prometheus.ssl.max_connections` configuration keys in `rabbitmq.conf`.

   GitHub issue: [#16407](https://github.com/rabbitmq/rabbitmq-server/pull/16407)
 

### MQTT Plugin

#### Bug Fixes

 * The MQTT connection process no longer fails and logs an exception when keepalive checks encounter socket errors on
   an already-closed connection.

   GitHub issue: [#16391](https://github.com/rabbitmq/rabbitmq-server/pull/16391)

#### Enhancements

 * It is now possible to cap the maximum number of concurrent MQTT client connections using the `mqtt.max_connections`
   configuration key in `rabbitmq.conf`.

   GitHub issue: [#16367](https://github.com/rabbitmq/rabbitmq-server/pull/16367)


### Federation Plugin

#### Bug Fixes

 * Federation links could fail to start during rolling cluster restarts.

   GitHub issues: [#16234](https://github.com/rabbitmq/rabbitmq-server/pull/16234), [#16224](https://github.com/rabbitmq/rabbitmq-server/issues/16224)


### LDAP Plugin

#### Enhancements

 * New `rabbitmq.conf` configuration settings for TLS cipher suites: `auth_ldap.ssl_options.ciphers.*`.

   GitHub issue: [#16226](https://github.com/rabbitmq/rabbitmq-server/pull/16226)


### HTTP Auth Backend Plugin

#### Enhancements

 * New `rabbitmq.conf` configuration settings for TLS cipher suites: `auth_http.ssl_options.ciphers.*`.

   GitHub issue: [#16226](https://github.com/rabbitmq/rabbitmq-server/pull/16226)


### Auth Backend Cache Plugin

#### Bug Fixes

 * The cache was not effective for reconnecting clients.

   GitHub issues: [#16255](https://github.com/rabbitmq/rabbitmq-server/pull/16255), [#16258](https://github.com/rabbitmq/rabbitmq-server/pull/16258)


### Trust Store Plugin

#### Bug Fixes

 * A user-provided `fail_if_no_peer_cert` value in the plugin's TLS options is now respected. Previously,
   an internal default could override the configured value.

   GitHub issue: [#16201](https://github.com/rabbitmq/rabbitmq-server/pull/16201)

#### Enhancements

 * New `rabbitmq.conf` configuration settings for TLS cipher suites: `trust_store.ssl_options.ciphers.*`.

   GitHub issue: [#16226](https://github.com/rabbitmq/rabbitmq-server/pull/16226)


### Dependency Changes

 * `ra` was upgraded to [`3.1.7`](https://github.com/rabbitmq/ra/releases/tag/v3.1.7)
 * `cuttlefish` was upgraded to [`3.7.0`](https://github.com/Kyorai/cuttlefish/releases)
 * `cowboy` was upgraded to [`2.15.0`](https://github.com/ninenines/cowboy/releases)
 * `cowlib` was upgraded to [`2.16.1`](https://github.com/ninenines/cowlib/releases)
 * `gun` was upgraded to [`2.3.0`](https://github.com/ninenines/gun/releases)
