Polpware.MessagingService.RabbitMQImpl 11.0.0
Polpware.MessagingService
Three .NET Standard 2.0 libraries, published to the Polpware baget feed, versioned together.
| Package | Target | Purpose |
|---|---|---|
Polpware.MessagingService.Spec |
netstandard2.0 | Broker-agnostic, async interfaces: IBroadcastService<TOut>, IDispatchingService<TOut>, IUnicastService<TOut>, ISubscriptionService<TIn, TInter>, IRPCLike<TCall, TReturn>, the handler verdict HandlingResult, MessagingServiceException. |
Polpware.MessagingService.Protocol |
netstandard2.0 | The message protocol: IMessageHead/IMessageBody/IMessageContainer and MessageHead/MessageBody/MessageContainer, whose lowercase property names are the wire keys. No dependencies. |
Polpware.MessagingService.RabbitMQImpl |
netstandard2.0 | The RabbitMQ implementation over RabbitMQ.Client 7: owning connection and channel pools (IConnectionPool, IChannelPool), sealed publishers (BroadcastService, DispatchingService, UnicastService), RPC (DispatchingRpcService, UnicastRpcService) and subscriptions (BroadcastSubscription, DispatchingSubscription, UnicastSubscription), each configured by an options object. Every broker call is async. |
Install
The packages are on the Polpware feed, https://baget.polpware.com/v3/index.json:
<PackageReference Include="Polpware.MessagingService.RabbitMQImpl" Version="11.0.0" />
<PackageReference Include="Polpware.MessagingService.Protocol" Version="11.0.0" />
Use
// publish (formportal's shape)
var dispatcher = new DispatchingService<MessageContainer>(connectionPool, channelPool,
new DispatchingOptions { ConnectionName = "Default", ChannelName = "events", Exchange = "FORM-EVENTS" },
x => JsonConvert.SerializeObject(x));
await dispatcher.DispatchMessageAsync(message, routingKey);
// subscribe (formevents' shape)
var subscription = new DispatchingSubscription<IMessageBody, IMessageContainer>(connectionPool, channelPool,
new SubscriptionOptions { Exchange = "FORM-EVENTS", Queue = "formevents", RoutingKey = "SUBMITTED" });
await subscription.SubscribeAsync(
raw => { var c = JsonConvert.DeserializeObject<MessageContainer>(raw)!; return (c.body!, (IMessageContainer)c); },
async (body, container, ct) => { await HandleAsync(container); return HandlingResult.Ack(); });
Register ReusableConnectionPool and ReusableChannelPool as singletons; the host's disposal closes the connections. Names (exchange, queue, routing key) are upper-cased with the invariant culture.
A UnicastSubscription sets prefetch 1 on its channel, and the client applies that to every consumer created on the same pooled channel afterwards. Give a unicast subscription its own ChannelName when other subscriptions share the connection.
A BroadcastSubscription with no Queue consumes a generated queue that is durable and not auto-deleted by default, as 10.x did. Set AutoDelete = true or Exclusive = true when the queue should go with the process.
Build, test, pack
This repository follows the chorigen .NET library standard; AGENTS.md carries the short form,
including the exact commands:
CI=true dotnet build -c Release— as CI builds (warnings are errors; nullable and missing-doc warnings are reported only)dotnet test -c Release— xunit; no broker is needed (the tests substitute the RabbitMQ client interfaces)CI=true dotnet pack -c Release -o out— runs package validation (against the locked API baseline oncebuild/Repo.propsnames one; unset while a major is open)
Versioning and releases
One version per repository, in build/Repo.props, shared by the three packages. A release is a vX.Y.Z
tag on main equal to that version; CI packs, publishes to baget, verifies the listing, and creates the
GitHub Release. CHANGELOG.md follows Keep a Changelog; from 10.0.0 on, every major version records its
breaking changes with a migration note, backed by docs/api-audit/<version>.md.
Repository
https://github.com/chorigen-io/polpware-messaging-service — main takes changes by pull request only.
No packages depend on Polpware.MessagingService.RabbitMQImpl.
.NET Standard 2.0
- Polpware.MessagingService.Spec (>= 11.0.0)
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- RabbitMQ.Client (>= 7.1.2)
| Version | Downloads | Last updated |
|---|---|---|
| 11.0.0 | 34 | 10/14/2026 |
| 10.0.2 | 2 | 10/13/2026 |
| 10.0.1 | 3 | 10/12/2026 |
| 10.0.0 | 24 | 10/10/2026 |
| 8.0.0 | 76 | 10/04/2025 |
| 7.0.0 | 17 | 10/04/2025 |
| 3.4.0 | 18 | 10/04/2025 |
| 3.3.1 | 17 | 10/04/2025 |
| 3.3.0 | 17 | 10/04/2025 |
| 3.2.0 | 21 | 10/04/2025 |
| 3.1.2 | 20 | 10/04/2025 |
| 3.1.1 | 19 | 10/04/2025 |
| 3.1.0 | 20 | 10/04/2025 |
| 3.0.0 | 19 | 10/04/2025 |
| 2.5.0 | 18 | 10/04/2025 |