Sundstrom.MyServiceBus.Abstractions 0.1.0-preview.4

This is a prerelease version of Sundstrom.MyServiceBus.Abstractions.
dotnet add package Sundstrom.MyServiceBus.Abstractions --version 0.1.0-preview.4
                    
NuGet\Install-Package Sundstrom.MyServiceBus.Abstractions -Version 0.1.0-preview.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sundstrom.MyServiceBus.Abstractions" Version="0.1.0-preview.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Sundstrom.MyServiceBus.Abstractions" Version="0.1.0-preview.4" />
                    
Directory.Packages.props
<PackageReference Include="Sundstrom.MyServiceBus.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Sundstrom.MyServiceBus.Abstractions --version 0.1.0-preview.4
                    
#r "nuget: Sundstrom.MyServiceBus.Abstractions, 0.1.0-preview.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Sundstrom.MyServiceBus.Abstractions@0.1.0-preview.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Sundstrom.MyServiceBus.Abstractions&version=0.1.0-preview.4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Sundstrom.MyServiceBus.Abstractions&version=0.1.0-preview.4&prerelease
                    
Install as a Cake Tool

✉️ MyServiceBus

.NET CI Java CI NuGet Maven Central

MyServiceBus (working title) is a lightweight, asynchronous service-bus runtime for Java and .NET, inspired by MassTransit.

It provides a consistent, opinionated broker-backed messaging model while remaining compatible with the documented MassTransit RabbitMQ and Azure Service Bus profiles. This makes it possible for Java and .NET services to send, publish, and consume messages across platforms, or interoperate with MassTransit in the verified compatibility scenarios.

See samples below.


Getting started with .NET

Install the RabbitMQ transport for a broker-backed application. It brings in the core runtime and abstractions transitively:

dotnet add package Sundstrom.MyServiceBus.RabbitMq --version 0.1.0-preview.4

For an application that only needs the core runtime and its in-memory mediator, install the main package directly:

dotnet add package Sundstrom.MyServiceBus --version 0.1.0-preview.4

Continue with the .NET quick start to register the bus, configure RabbitMQ, add a consumer, and publish a message. The feature walkthrough covers the complete C# and Java APIs.

NuGet packages

Package Purpose
Sundstrom.MyServiceBus Core messaging runtime and in-memory mediator
Sundstrom.MyServiceBus.Abstractions Portable message contracts, contexts, and endpoint abstractions
Sundstrom.MyServiceBus.Inspection Queryable bus metadata and topology inspection APIs
Sundstrom.MyServiceBus.Monitoring Optional batched runtime monitoring exporter and collector protocol
Sundstrom.MyServiceBus.RabbitMq RabbitMQ transport and configuration integration
Sundstrom.MyServiceBus.AzureServiceBus Verified-preview Azure Service Bus transport for direct send and publish/subscribe
Sundstrom.MyServiceBus.Testing In-memory test harness and testing utilities

All packages currently use the same preview version. Install Sundstrom.MyServiceBus.Testing separately in test projects when the test harness is needed.


Getting started with Java

Add the RabbitMQ module to a Gradle application. It brings in the Java runtime and its foundational modules transitively:

dependencies {
    implementation 'io.github.marinasundstrom.myservicebus:myservicebus-rabbitmq:0.1.0-preview.4'
}

For Maven applications:

<dependency>
  <groupId>io.github.marinasundstrom.myservicebus</groupId>
  <artifactId>myservicebus-rabbitmq</artifactId>
  <version>0.1.0-preview.4</version>
</dependency>

Continue with the Java quick start or the detailed Java guide.

Maven Central artifacts

Artifact Purpose
io.github.marinasundstrom.myservicebus:myservicebus Core messaging runtime and in-memory mediator
io.github.marinasundstrom.myservicebus:myservicebus-inspection Queryable bus metadata and topology inspection APIs
io.github.marinasundstrom.myservicebus:myservicebus-monitoring Optional batched runtime monitoring exporter and collector protocol
io.github.marinasundstrom.myservicebus:myservicebus-abstractions Portable messaging contracts and abstractions
io.github.marinasundstrom.myservicebus:myservicebus-di Dependency-injection abstractions
io.github.marinasundstrom.myservicebus:myservicebus-logging Logging abstractions and adapters
io.github.marinasundstrom.myservicebus:myservicebus-tasks Asynchronous task and cancellation abstractions
io.github.marinasundstrom.myservicebus:myservicebus-rabbitmq RabbitMQ transport and configuration integration
io.github.marinasundstrom.myservicebus:myservicebus-azure-service-bus Verified-preview Azure Service Bus transport for direct send and publish/subscribe
io.github.marinasundstrom.myservicebus:myservicebus-testing In-memory test harness and testing utilities

All Java artifacts use the same version as the corresponding NuGet release.

Runtime monitoring deployment

The optional inspection and exporter APIs are client libraries in the package tables above. The collector and Blazor dashboard are separate deployable applications, published as versioned Linux container images:

ghcr.io/marinasundstrom/myservicebus-monitoring-collector:0.1.0-preview.4
ghcr.io/marinasundstrom/myservicebus-monitoring-dashboard:0.1.0-preview.4

See the runtime monitoring guide for configuration, the live dashboard model, OpenTelemetry boundaries, and the experimental security scope.


What is MyServiceBus?

MyServiceBus defines a stable messaging runtime with concepts such as:

  • publish vs send
  • consumers
  • request/response
  • retries and error handling
  • middleware / pipeline behaviors
  • scheduling
  • in-memory testing

These portable concepts remain consistent across supported transport profiles, while broker-specific capabilities and guarantees remain explicit.

Unlike most Java messaging solutions, MyServiceBus does not require a framework-wide commitment (such as Spring). It can be used as a self-contained runtime, integrated into an existing application, or composed via factories and decorators—depending on project needs.


Goals

  • Provide a focused, community-driven alternative for basic MassTransit-style broker-backed messaging scenarios.
  • Preserve a MassTransit-compatible messaging model across Java and .NET.
  • Enable Java services to easily connect with .NET/C# services using shared messaging semantics.
  • Offer a familiar experience for developers coming from .NET.
  • Maintain feature parity and consistent behavior between the C# and Java implementations.
    See the design guidelines for architectural and behavioral parity.

Features

  • Fire-and-forget message sending
  • Publish/subscribe pattern
  • Request/response pattern (RequestClient and scoped client factory)
  • RabbitMQ transport
  • Verified-preview Azure Service Bus transport with corresponding C# and Java implementations
  • In-memory mediator and test harness
  • Compatibility with MassTransit message envelopes
  • Raw JSON messages
  • Fault and error handling semantics aligned with MassTransit
  • Middleware / pipeline behaviors
  • OpenTelemetry support
  • Java and C# implementations with aligned semantics

Specification


Building from source

Prerequisites

  • .NET SDK
  • Java (for the Java modules): JDK 17
  • Gradle

Building

  • .NET
  dotnet restore
  dotnet build

Running tests

  • .NET

    dotnet test
    
  • Java

    gradle test
    

Quick start

Minimal steps to configure MyServiceBus and publish a message. For a broader tour of the library, see the feature walkthrough, which covers both basic and advanced usage.


C#

Register the bus with the ASP.NET host builder:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddServiceBus(x =>
{
    x.AddConsumer<SubmitOrderConsumer>();

    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.ConfigureEndpoints(context);
    });
});

var app = builder.Build();

await app.StartAsync();

var bus = app.Services.GetRequiredService<IMessageBus>();

Define the messages and consumer:

public record SubmitOrder(Guid OrderId);
public record OrderSubmitted(Guid OrderId);

class SubmitOrderConsumer : IConsumer<SubmitOrder>
{
    public Task Consume(ConsumeContext<SubmitOrder> context) =>
        context.Publish(new OrderSubmitted(context.Message.OrderId));
}

Publish the SubmitOrder message 🚀:

await bus.Publish(
    new SubmitOrder(Guid.NewGuid()),
    ctx => ctx.Headers["trace-id"] = Guid.NewGuid()
);

Java

Register the bus:

ServiceCollection services = ServiceCollection.create();

services.from(MessageBusServices.class)
        .addServiceBus(cfg -> {
            cfg.addConsumer(SubmitOrderConsumer.class);
            cfg.using(
                RabbitMqFactoryConfigurator.class,
                (context, rbCfg) -> rbCfg.configureEndpoints(context)
            );
        });

ServiceProvider provider = services.buildServiceProvider();
MessageBus bus = provider.getService(MessageBus.class);

bus.start().join();

Define the messages and consumer:

record SubmitOrder(UUID orderId) { }
record OrderSubmitted(UUID orderId) { }

class SubmitOrderConsumer implements Consumer<SubmitOrder> {
    @Override
    public CompletableFuture<Void> consume(ConsumeContext<SubmitOrder> context) {
        return context.publish(
            new OrderSubmitted(context.getMessage().orderId())
        );
    }
}

Publish the SubmitOrder message:

bus.publish(
    new SubmitOrder(UUID.randomUUID()),
    ctx -> ctx.getHeaders().put("trace-id", UUID.randomUUID())
).join();

Repository structure

  • src/ – C# and Java source code
  • test/ – Test projects
  • docs/ – Documentation, including the feature walkthrough and specifications Development documents live in docs/development/
  • docker-compose.yml – Docker configuration for local infrastructure

Java Quickstart

See src/Java/README.md for detailed Java build and run instructions, including JDK 17 prerequisites and running the test application.


Contributing

Contributions are welcome! Please run dotnet test before submitting a pull request and follow the coding conventions described in AGENTS.md.


License

This project is licensed under the MIT License.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Sundstrom.MyServiceBus.Abstractions:

Package Downloads
Sundstrom.MyServiceBus.Testing

In-memory test harness and testing utilities for MyServiceBus.

Sundstrom.MyServiceBus

Cross-language messaging runtime with MassTransit-compatible concepts and wire conventions.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-preview.4 0 8/27/2026
0.1.0-preview.2 0 8/27/2026
0.1.0-preview.1 17 8/26/2026