Rymote.Synapse.Core
1.0.0
dotnet add package Rymote.Synapse.Core --version 1.0.0
NuGet\Install-Package Rymote.Synapse.Core -Version 1.0.0
<PackageReference Include="Rymote.Synapse.Core" Version="1.0.0" />
<PackageVersion Include="Rymote.Synapse.Core" Version="1.0.0" />
<PackageReference Include="Rymote.Synapse.Core" />
paket add Rymote.Synapse.Core --version 1.0.0
#r "nuget: Rymote.Synapse.Core, 1.0.0"
#:package Rymote.Synapse.Core@1.0.0
#addin nuget:?package=Rymote.Synapse.Core&version=1.0.0
#tool nuget:?package=Rymote.Synapse.Core&version=1.0.0
Rymote.Synapse.Core
Strongly-typed in-process event bus for .NET 10. Part of Rymote.Synapse.
Rymote.Synapse.Core provides:
- An
ISynapseBusyou publish events to and subscribe handlers against. - Three handler registration styles: delegate,
IEventHandler<TPayload>classes resolved from DI, and methods marked[SynapseHandler]discovered by assembly scan. - Per-message-type dispatch policy:
Synchronous(handlers run on the publisher's task) orFireAndForget(handlers run on a per-subscription bounded channel reader). - Per-subscription failure handling with retry / dead-letter / drop / rethrow decisions and pluggable backoff policies.
- Native .NET 10 observability via
System.Diagnostics.ActivitySource(sourceRymote.Synapse) andSystem.Diagnostics.Metrics.Meter(meterRymote.Synapse).
AtLeastOnce dispatch requires Rymote.Synapse.Persistence.* (forthcoming). Clustered delivery requires Rymote.Synapse.Net and Rymote.Synapse.Cluster (forthcoming).
Quickstart
ServiceCollection services = new();
services.AddLogging();
services.AddScoped<OrderPlacedHandler>();
services.AddSynapse()
.UseMessagePackSerialization()
.ConfigureMessageType<OrderPlaced>(options => options.Dispatch = new DispatchPolicy.Synchronous())
.AddHandler<OrderPlacedHandler>();
ServiceProvider provider = services.BuildServiceProvider();
provider.ActivateSynapse();
ISynapseBus bus = provider.GetRequiredService<ISynapseBus>();
await bus.PublishAsync(new OrderPlaced(orderId: Guid.NewGuid(), amount: 19.99m));
See the spec for the full architecture.
AtLeastOnce dispatch
AtLeastOnce requires a persistence provider — install Rymote.Synapse.Persistence.Memory (ephemeral) or Rymote.Synapse.Persistence.File (durable, forthcoming):
services.AddSynapse()
.UseMessagePackSerialization()
.UseMemoryPersistence()
.ConfigureMessageType<PaymentCaptured>(typeOptions =>
typeOptions.Dispatch = new DispatchPolicy.AtLeastOnce(
MaxAttempts: 5,
Backoff: BackoffPolicy.Exponential(TimeSpan.FromSeconds(1), TimeSpan.FromMinutes(1)),
DeadLetter: new DeadLetterDestination.Channel("payments.dlq")));
Failed messages are dead-lettered as typed DeadLetterEnvelope<TPayload> events on the same bus:
bus.Subscribe<DeadLetterEnvelope<PaymentCaptured>>((envelope, context, ct) =>
{
logger.LogWarning(
"Payment {Id} dead-lettered after {Attempts} attempts: {Error}",
envelope.Payload.Original.Payload.PaymentId,
envelope.Payload.Attempts,
envelope.Payload.LastExceptionMessage);
return Task.CompletedTask;
});
DLQ subscriptions default to FireAndForget dispatch to prevent recursive dead-lettering.
| 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
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Rymote.Synapse.Abstractions (>= 1.0.0)
- Rymote.Synapse.Diagnostics (>= 1.0.0)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Rymote.Synapse.Core:
| Package | Downloads |
|---|---|
|
Rymote.Synapse.Serialization.MessagePack
MessagePack codec for Rymote.Synapse envelope and payload serialization. |
|
|
Rymote.Synapse.Persistence.Memory
In-memory IMessageLog implementation for Rymote.Synapse AtLeastOnce dispatch. |
|
|
Rymote.Synapse.Net
TCP+TLS and QUIC transports for Rymote.Synapse inter-node communication. |
|
|
Rymote.Synapse.Cluster
Cross-node clustering for Rymote.Synapse: full-mesh peer connections, reconnect, subscription propagation, routing, AtLeastOnce across peers. |
|
|
Rymote.Synapse.AspNetCore
ASP.NET Core integration for Rymote.Synapse: IHostedService lifecycle, health endpoint, HTTP-trigger publish endpoint. |
GitHub repositories
This package is not used by any popular GitHub repositories.