Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 deletions CODEBASE_SUMMARY.md → AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ The RabbitMQ .NET Client is a comprehensive AMQP 0-9-1 client library for .NET,
- **Dual-licensed**: Apache License 2.0 and Mozilla Public License 2.0
- **Target Frameworks**: .NET 8.0 and .NET Standard 2.0
- **Language**: C# 12.0 with nullable reference types enabled
- **Current Version**: 7.2.0 (in development)
- **Latest Stable**: 7.1.2 (released March 2025)
- **Current Version**: 7.2.1 (in development)
- **Latest Stable**: 7.2.0 (released November 2025)

## Major Version 7.x Changes

Expand Down Expand Up @@ -65,7 +65,7 @@ Wraps `Connection` to provide automatic recovery from network failures:

#### 3. Channel Management (`IChannel` / `Channel`)

**Location**: `projects/RabbitMQ.Client/Impl/Channel.cs`
**Location**: `projects/RabbitMQ.Client/Impl/Channel.cs` (partial class, with `Channel.BasicPublish.cs` and `Channel.PublisherConfirms.cs`)

Channels are lightweight virtual connections multiplexed over a single TCP connection:

Expand Down Expand Up @@ -223,13 +223,12 @@ var factory = new ConnectionFactory
Per-channel configuration:

```csharp
var options = new CreateChannelOptions
{
PublisherConfirmationsEnabled = true,
PublisherConfirmationTrackingEnabled = true,
OutstandingPublisherConfirmationsRateLimiter = rateLimiter,
ContinuationTimeout = TimeSpan.FromSeconds(20)
};
var options = new CreateChannelOptions(
publisherConfirmationsEnabled: true,
publisherConfirmationTrackingEnabled: true,
outstandingPublisherConfirmationsRateLimiter: rateLimiter,
consumerDispatchConcurrency: 1
);
```

## Key Design Patterns
Expand Down Expand Up @@ -305,7 +304,7 @@ Multiple levels of shutdown:
- **IntegrationFixture**: Base class for integration tests
- **TestConnectionRecoveryBase**: Base for recovery tests
- **RabbitMQCtl**: Wrapper for `rabbitmqctl` commands
- **ToxiproxyManager**: Network failure simulation
- **ToxiproxyManager**: Network failure simulation (in `projects/Test/Integration/`)

## Build and Packaging

Expand All @@ -315,11 +314,14 @@ Multiple levels of shutdown:
rabbitmq-dotnet-client/
├── projects/
│ ├── RabbitMQ.Client/ # Main client library
│ ├── RabbitMQ.Client.OAuth2/ # OAuth2 support
│ ├── RabbitMQ.Client.OAuth2/ # OAuth2 support (source)
│ ├── RabbitMQ.Client.OAuth2-NuGet/ # OAuth2 NuGet packaging
│ ├── RabbitMQ.Client.OpenTelemetry/ # OTel extensions
│ ├── Test/ # Test projects
│ ├── Benchmarks/ # Performance benchmarks
│ └── Applications/ # Sample applications
│ ├── Applications/ # Sample applications
│ ├── toxiproxy-netcore/ # Toxiproxy .NET client (vendored)
│ └── specs/ # AMQP 0-9-1 spec files
├── .ci/ # CI configuration
├── .github/workflows/ # GitHub Actions
└── packages/ # NuGet output
Expand Down Expand Up @@ -411,11 +413,12 @@ Configurable TLS options:

## Known Issues and Limitations

### Current Issues (as of 7.1.2)
### Current Issues (as of 7.2.0)

1. **Deadlock Scenarios**: Rare deadlocks during channel close (addressed in 7.1.1)
2. **ObjectDisposedException**: Occasional exceptions during shutdown (addressed in 7.1.2)
3. **Rate Limiter**: Issues with lease acquisition (fixed in 7.1.1)
1. **Heartbeat Crashes**: Unhandled exceptions in heartbeat timer callbacks (addressed in 7.2.1)
2. **Publisher Confirm Semaphore**: Unconditional semaphore release on cancellation (addressed in 7.2.1)
3. **Channel Shutdown**: `TryComplete` needed instead of `Complete` during channel shutdown (addressed in 7.2.1)
4. **Auto-delete Entity Recovery**: Recorded bindings not removed for auto-delete entities (addressed in 7.2.1)

### Design Limitations

Expand All @@ -424,7 +427,7 @@ Configurable TLS options:
3. **Frame Size**: Maximum frame size negotiated at connection time
4. **Synchronous RPC**: Only one RPC operation per channel at a time

## Future Directions (7.2.0)
## Future Directions (7.2.1)

Based on the changelog and issue tracker:

Expand Down
68 changes: 68 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# RabbitMQ .NET Client release process

## Ensure builds are green:

* [GitHub Actions](https://github.com/rabbitmq/rabbitmq-dotnet-client/actions)


## Update API documentation

Note: `main` (`6.x` and later) only

Please see [this guide](https://github.com/rabbitmq/rabbitmq-dotnet-client/blob/main/APIDOCS.md).


## Update CHANGELOG

Run `tools/generate-changelog.sh` with the previous tag and the new tag:

```
tools/generate-changelog.sh v7.X.Y v7.X.(Y+1)
```

This inserts a new section into `CHANGELOG.md` after the `# Changelog` header.
The release date is set to `UNRELEASED-DATE` as a placeholder. Review the
output with `git diff CHANGELOG.md` and edit as needed before committing.


## Create and push release tag

Note: `alpha` releases are versioned by default via the MinVer package. The version is based off of the most recent tag.

RC release:

```
git tag -a -s -u B1B82CC0CF84BA70147EBD05D99DE30E43EAE440 -m 'rabbitmq-dotnet-client v7.X.Y-rc.1' 'v7.X.Y-rc.1'
```

Final release:

```
git tag -a -s -u B1B82CC0CF84BA70147EBD05D99DE30E43EAE440 -m 'rabbitmq-dotnet-client v7.X.Y' 'v7.X.Y'
```

Push!

```
git push --tags
```

## `6.x` branch


### Trigger build locally

```
cd path\to\rabbitmq-dotnet-client
git checkout v6.X.Y
git clean -xffd
.\build.bat
dotnet build ./RabbitMQDotNetClient.sln --configuration Release --property:CONCOURSE_CI_BUILD=true
dotnet nuget push -k NUGET_API_KEY -s https://api.nuget.org/v3/index.json ./packages/RabbitMQ.Client.6.X.Y.nupkg
```

## `main` (`7.x`) branch

* Close the appropriate milestone, and make a note of the link to the milestone with closed issues visible
* Use the GitHub web UI or `gh release create` command to create the new release
* GitHub actions will build and publish the release to NuGet
Loading
Loading