Shuttle.Hopper
21.0.0-alpha
Prefix Reserved
dotnet add package Shuttle.Hopper --version 21.0.0-alpha
NuGet\Install-Package Shuttle.Hopper -Version 21.0.0-alpha
<PackageReference Include="Shuttle.Hopper" Version="21.0.0-alpha" />
<PackageVersion Include="Shuttle.Hopper" Version="21.0.0-alpha" />
<PackageReference Include="Shuttle.Hopper" />
paket add Shuttle.Hopper --version 21.0.0-alpha
#r "nuget: Shuttle.Hopper, 21.0.0-alpha"
#:package Shuttle.Hopper@21.0.0-alpha
#addin nuget:?package=Shuttle.Hopper&version=21.0.0-alpha&prerelease
#tool nuget:?package=Shuttle.Hopper&version=21.0.0-alpha&prerelease
Documentation
Please visit the Shuttle.Hopper documentation for more information.
Getting Started
Start a new Console Application project. We'll need to install one of the support transport implementations. For this example we'll use Shuttle.Hopper.AzureStorageQueues which can be hosted locally using Azurite:
PM> Install-Package Shuttle.Hopper.AzureStorageQueues
We'll also make use of the .NET generic host:
PM> Install-Package Microsoft.Extensions.Hosting
Next we'll implement our endpoint in order to start listening on our transport:
internal class Program
{
static async Task Main(string[] args)
{
await Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
services
.AddServiceBus(builder =>
{
builder.Options.Inbox.WorkTransportUri = "azuresq://azure/work";
// Delegates may also be added to the builder, including adding dependencies
builder.AddMessageHandler(async (IHandlerContext<SomeMessage> context, ISomeDependency instance) =>
{
Console.WriteLine($@"[some-message] : guid = {context.Message.Guid}");
await Task.CompletedTask;
});
})
.AddAzureStorageQueues(builder =>
{
builder.AddOptions("azure", new AzureStorageTransportOptions
{
ConnectionString = "UseDevelopmentStorage=true;"
});
});
})
.Build()
.RunAsync();
}
}
Even though the options may be set directly as above, typically one would make use of a configuration provider:
internal class Program
{
private static async Task Main(string[] args)
{
await Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
var configuration =
new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
services
.AddSingleton<IConfiguration>(configuration)
.AddServiceBus(builder =>
{
configuration
.GetSection(ServiceBusOptions.SectionName)
.Bind(builder.Options);
})
.AddAzureStorageQueues(builder =>
{
builder.AddOptions("azure", new AzureStorageTransportOptions
{
ConnectionString = configuration
.GetConnectionString("azure")
});
});
})
.Build()
.RunAsync();
}
}
The appsettings.json file would be as follows (remember to set to Copy always):
{
"ConnectionStrings": {
"azure": "UseDevelopmentStorage=true;"
},
"Shuttle": {
"ServiceBus": {
"Inbox": {
"WorkTransportUri": "azuresq://azure/work",
}
}
}
}
Send a command message for processing
await serviceBus.SendAsync(new RegisterMember
{
UserName = "user-name",
EMailAddress = "user@domain.com"
});
Publish an event message when something interesting happens
Before publishing an event one would need to register an ISubscrtiptionService implementation such as Shuttle.Hopper.Sql.Subscription.
await serviceBus.PublishAsync(new MemberRegistered
{
UserName = "user-name"
});
Subscribe to those interesting events
services.AddServiceBus(builder =>
{
builder.AddSubscription<MemberRegistered>();
});
Handle any messages
public class RegisterMemberHandler : IMessageHandler<RegisterMember>
{
public RegisterMemberHandler(IDependency dependency)
{
}
public async Task ProcessMessageAsync(IHandlerContext<RegisterMember> context, CancellationToken cancellationToken = default)
{
// perform member registration
await context.PublishAsync(new MemberRegistered
{
UserName = context.Message.UserName
});
}
}
public class MemberRegisteredHandler : IMessageHandler<MemberRegistered>
{
public async Task ProcessMessageAsync(IHandlerContext<MemberRegistered> context, CancellationToken cancellationToken = default)
{
// processing
}
}
| 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.Caching.Memory (>= 10.0.1)
- Microsoft.Extensions.DependencyInjection (>= 10.0.1)
- Microsoft.Extensions.Hosting (>= 10.0.1)
- Shuttle.Core.Compression (>= 21.0.0-alpha)
- Shuttle.Core.Contract (>= 21.0.0-alpha)
- Shuttle.Core.Encryption (>= 21.0.0-alpha)
- Shuttle.Core.Pipelines (>= 21.0.0-alpha)
- Shuttle.Core.Reflection (>= 21.0.0-alpha)
- Shuttle.Core.Serialization (>= 21.0.0-alpha)
- Shuttle.Core.Specification (>= 21.0.0-alpha)
- Shuttle.Core.Streams (>= 21.0.0-alpha)
- Shuttle.Core.System (>= 21.0.0-alpha)
- Shuttle.Core.Threading (>= 21.0.0-alpha)
- Shuttle.Core.TransactionScope (>= 21.0.0-alpha)
NuGet packages (9)
Showing the top 5 NuGet packages that depend on Shuttle.Hopper:
| Package | Downloads |
|---|---|
|
Shuttle.Hopper.Logging
Provides non-intrusive logging for Shuttle.Hopper components. |
|
|
Shuttle.Hopper.SqlServer.Queue
Provides a Sql Server Queue implementation for use with Shuttle.Hopper. |
|
|
Shuttle.Hopper.AmazonSqs
Amazon Simple Queue Service implementation for use with Shuttle.Hopper. |
|
|
Shuttle.Hopper.Testing
Test fixtures to facilitate testing of components, such as queues, that relate to Shuttle.Hopper. |
|
|
Shuttle.Hopper.AzureEventHubs
Azure Event Hubs implementation for use with Shuttle.Hopper. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 21.0.0-alpha | 42 | 1/18/2026 |