Excalibur.Dispatch.Transport.Pulsar
10.0.0-alpha.11
dotnet add package Excalibur.Dispatch.Transport.Pulsar --version 10.0.0-alpha.11
NuGet\Install-Package Excalibur.Dispatch.Transport.Pulsar -Version 10.0.0-alpha.11
<PackageReference Include="Excalibur.Dispatch.Transport.Pulsar" Version="10.0.0-alpha.11" />
<PackageVersion Include="Excalibur.Dispatch.Transport.Pulsar" Version="10.0.0-alpha.11" />
<PackageReference Include="Excalibur.Dispatch.Transport.Pulsar" />
paket add Excalibur.Dispatch.Transport.Pulsar --version 10.0.0-alpha.11
#r "nuget: Excalibur.Dispatch.Transport.Pulsar, 10.0.0-alpha.11"
#:package Excalibur.Dispatch.Transport.Pulsar@10.0.0-alpha.11
#addin nuget:?package=Excalibur.Dispatch.Transport.Pulsar&version=10.0.0-alpha.11&prerelease
#tool nuget:?package=Excalibur.Dispatch.Transport.Pulsar&version=10.0.0-alpha.11&prerelease
Excalibur.Dispatch.Transport.Pulsar
Apache Pulsar transport for the Excalibur framework, built on the DotPulsar client.
Provides competing-consumer message streaming with a subscription model that mirrors the framework's consumer-group transport semantics.
CloudEvents
Inbound CloudEvents are decoded automatically. Every receiver on this transport is wrapped by the framework's decoding decorator, so a message carrying CloudEvents markers arrives with the decoded event attached to it — the body and properties are untouched, and a message that is not a CloudEvent passes through unchanged. Every message in the batch is delivered, including a malformed one: it arrives carrying a decode error instead of a decoded event, never dropped. There is nothing to register and no option to set.
Outbound CloudEvents are opt-in per message. Attach the event to the message you were going to send anyway:
await sender.SendAsync(message.WithCloudEvent(cloudEvent), cancellationToken);
The event is published in CloudEvents structured mode — the whole event becomes a JSON document in the
body under the application/cloudevents+json content type. A message you do not call WithCloudEvent on
reaches the wire byte-identical, so ordinary traffic is unaffected, and nothing produces a CloudEvent for
you. This path needs no trimming or ahead-of-time annotation: the envelope is written with a UTF-8 JSON
writer rather than a reflection-based serializer.
Usage
services.AddPulsarTransport("events", pulsar =>
{
pulsar.ServiceUrl("pulsar://localhost:6650")
.Topic("orders")
.SubscriptionName("order-processors")
.SubscriptionType(PulsarSubscriptionType.Shared);
});
Subscription types
SubscriptionName is the durable consumer identity (the Pulsar analog of a Kafka consumer group).
SubscriptionType controls how messages are distributed across consumers sharing that subscription:
| Type | Behavior |
|---|---|
Shared |
Competing consumers, round-robin delivery (default). |
Exclusive |
A single consumer holds the subscription. |
Failover |
One active consumer; others stand by. |
KeyShared |
Same-key messages go to the same consumer, preserving key ordering. |
Scope
This package registers the Pulsar transport primitives — a keyed ITransportSender and
ITransportReceiver for sending, receiving, and acknowledging messages directly against a Pulsar broker.
High-level integration into the dispatch pipeline (publishing and consuming typed dispatch messages
end-to-end through a transport adapter) is provided separately.
Capabilities
Request/reply is not natively supported. Validation fails fast at startup on invalid configuration.
| 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
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.12.0)
- DotPulsar (>= 5.3.0)
- Excalibur.Dispatch (>= 10.0.0-alpha.11)
- Excalibur.Dispatch.Abstractions (>= 10.0.0-alpha.11)
- Excalibur.Dispatch.Transport.Abstractions (>= 10.0.0-alpha.11)
- Google.Protobuf (>= 3.34.1)
- Medo.Uuid7 (>= 3.2.0)
- Microsoft.Extensions.Configuration (>= 10.0.10)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Http (>= 10.0.10)
- Microsoft.Extensions.Logging (>= 10.0.10)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
- Microsoft.Extensions.ObjectPool (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.10)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.10)
- System.Threading.RateLimiting (>= 10.0.7)
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 |
|---|---|---|
| 10.0.0-alpha.11 | 34 | 9/15/2026 |
| 10.0.0-alpha.10 | 56 | 9/6/2026 |
| 10.0.0-alpha.9 | 69 | 8/31/2026 |
| 10.0.0-alpha.8 | 65 | 8/14/2026 |
| 10.0.0-alpha.7 | 62 | 8/13/2026 |
| 10.0.0-alpha.6 | 70 | 8/11/2026 |
| 10.0.0-alpha.5 | 58 | 8/10/2026 |
| 10.0.0-alpha.4 | 58 | 8/10/2026 |
Release notes and versioning policy: https://docs.excalibur-dispatch.dev/docs/migration/version-upgrades