Kuestenlogik.Bowire.Protocol.Amqp
1.0.0
Prefix Reserved
dotnet add package Kuestenlogik.Bowire.Protocol.Amqp --version 1.0.0
NuGet\Install-Package Kuestenlogik.Bowire.Protocol.Amqp -Version 1.0.0
<PackageReference Include="Kuestenlogik.Bowire.Protocol.Amqp" Version="1.0.0" />
<PackageVersion Include="Kuestenlogik.Bowire.Protocol.Amqp" Version="1.0.0" />
<PackageReference Include="Kuestenlogik.Bowire.Protocol.Amqp" />
paket add Kuestenlogik.Bowire.Protocol.Amqp --version 1.0.0
#r "nuget: Kuestenlogik.Bowire.Protocol.Amqp, 1.0.0"
#:package Kuestenlogik.Bowire.Protocol.Amqp@1.0.0
#addin nuget:?package=Kuestenlogik.Bowire.Protocol.Amqp&version=1.0.0
#tool nuget:?package=Kuestenlogik.Bowire.Protocol.Amqp&version=1.0.0
Kuestenlogik.Bowire.Protocol.Amqp
Bowire plugin for AMQP — both AMQP 0.9.1 (RabbitMQ, ActiveMQ Classic) and AMQP 1.0 (Azure Service Bus, ActiveMQ Artemis) through a single plugin id (amqp). The wire variant is selected from the URL scheme.
URL schemes
amqp://host:5672/<vhost> # AMQP 0.9.1, RabbitMQ default
amqps://host:5671/<vhost> # AMQP 0.9.1 with TLS
amqp1://host:5672 # AMQP 1.0 (no vhost concept)
amqps1://host:5671 # AMQP 1.0 with TLS
The URL scheme picks the wire stack (RabbitMQ.Client vs AMQPNetLite)
the same way grpcweb@ flips the gRPC plugin between HTTP/2 native and
gRPC-Web. One plugin, one package, two wires.
How it discovers + invokes
- 0.9.1 discovery uses the RabbitMQ Management HTTP API
(
GET /api/exchanges/{vhost},GET /api/bindings/{vhost}). Every exchange becomes a Bowire service; every routing key bound to it becomes asend:<key>method on that service alongside the unconstrainedsend. The unnamed default exchange and the reservedamq.*family are hidden unlessshowInternalServicesis on. - 1.0 discovery is schema-less by spec — the plugin exposes a
synthetic
Brokerservice withsend(unary) andreceive(server-streaming). The target address comes from theaddressmetadata key (or the URL path) at invoke time. - Invocation:
- 0.9.1:
basic.publishon a fresh channel. Metadata maps ontoroutingKey/contentType/messageId/correlationId/deliveryMode(1=non-persistent, 2=persistent) /expiration/mandatory. The unnamed default exchange is reachable as the service name(default). - 1.0:
Session.Sendover a freshSenderLinkagainst the resolved address. Same metadata vocabulary (where applicable).
- 0.9.1:
- Streaming:
- 0.9.1: opens an
AsyncEventingBasicConsumeron the queue named by thequeuemetadata key (defaults to the service name). Yields messages until the configuredreceiveTimeoutSecondselapses with no new frame (default 30s), then closes cleanly. - 1.0: opens a
ReceiverLinkagainst the target address. Same timeout shape, same finite-stream contract.
- 0.9.1: opens an
Metadata keys are common across both wires where the concept exists
(content-type, message-id, correlation-id). Wire-specific keys
(routingKey, mandatory, deliveryMode for 0.9.1; address for
1.0) are documented in the inline XML comments on
BowireAmqpProtocol.
Install
dotnet add package Kuestenlogik.Bowire.Protocol.Amqp
Embedded mode picks the plugin up via AddBowire() plugin scanning, no manual
registration required. Standalone CLI: bowire plugin install Kuestenlogik.Bowire.Protocol.Amqp.
AsyncAPI bindings
The AsyncAPI plugin (Kuestenlogik.Bowire.AsyncApi) routes
bindings.amqp and bindings.amqp1 declarations through this
plugin via the registry-driven binding lookup — shipped in Bowire
1.5.x as Phase C of the AsyncAPI roll-out.
Tests
Unit tests run on every CI build with no broker required. The
integration suite under tests/.../Integration spins up real
RabbitMQ (0.9.1) and ActiveMQ Artemis (1.0) containers via
Testcontainers and round-trips publish + consume against each. The
integration tests carry [Trait("Category", "Docker")] so a local
dotnet test --filter "Category!=Docker" skips them on hosts
without a Docker daemon — CI runs them.
Sample
A self-contained sample lives in the central
Bowire.Samples repo
under
src/Kuestenlogik.Bowire.Samples.Amqp
— docker compose -f compose.yaml up brings up RabbitMQ with the
management plugin, the ASP.NET host declares a harbor topic
exchange + bound queues and emits crane telemetry on a timer, and
Bowire pointed at amqp://localhost:5672 discovers the surface and
streams the events live.
License
Apache 2.0. See LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AMQPNetLite (>= 2.5.2)
- Kuestenlogik.Bowire (>= 1.6.0)
- RabbitMQ.Client (>= 7.2.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 113 | 5/25/2026 |
| 1.0.0-rc.3 | 61 | 5/25/2026 |
| 1.0.0-rc.2 | 47 | 5/25/2026 |
| 1.0.0-rc.1 | 56 | 5/25/2026 |
| 0.2.2 | 101 | 5/24/2026 |
| 0.2.1 | 157 | 5/24/2026 |
| 0.2.0 | 93 | 5/24/2026 |