Shuttle.Esb 15.0.0

Prefix Reserved
dotnet add package Shuttle.Esb --version 15.0.0                
NuGet\Install-Package Shuttle.Esb -Version 15.0.0                
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="Shuttle.Esb" Version="15.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Shuttle.Esb --version 15.0.0                
#r "nuget: Shuttle.Esb, 15.0.0"                
#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.
// Install Shuttle.Esb as a Cake Addin
#addin nuget:?package=Shuttle.Esb&version=15.0.0

// Install Shuttle.Esb as a Cake Tool
#tool nuget:?package=Shuttle.Esb&version=15.0.0                

Documentation

Please visit out official documentation for more information.

Getting Started

Start a new Console Application project. We'll need to install one of the support queue implementations. For this example we'll use Shuttle.Esb.AzureStorageQueues which can be hosted locally using Azurite:

PM> Install-Package Shuttle.Esb.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 queue:

internal class Program
{
    static async Task Main(string[] args)
    {
        await Host.CreateDefaultBuilder()
            .ConfigureServices(services =>
            {
                services
                    .AddServiceBus(builder =>
                    {
                        builder.Options.Inbox.WorkQueueUri = "azuresq://azure/work";
                        builder.Options.Asynchronous = true; // NOTE: we'll be using async processing
                    })
                    .AddAzureStorageQueues(builder =>
                    {
                        builder.AddOptions("azure", new AzureStorageQueueOptions
                        {
                            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);

                        builder.Options.Asynchronous = true; // NOTE: we'll be using async processing
                    })
                    .AddAzureStorageQueues(builder =>
                    {
                        builder.AddOptions("azure", new AzureStorageQueueOptions
                        {
                            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": {
        "WorkQueueUri": "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.Esb.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 : IAsyncMessageHandler<RegisterMember>
{
    public RegisterMemberHandler(IDependency dependency)
    {
    }

	public async Task ProcessMessageAsync(IHandlerContext<RegisterMember> context)
	{
        // perform member registration

		await context.PublishAsync(new MemberRegistered
		{
			UserName = context.Message.UserName
		});
	}
}
public class MemberRegisteredHandler : IAsyncMessageHandler<MemberRegistered>
{
	public async Task ProcessMessageAsync(IHandlerContext<MemberRegistered> context)
	{
        // processing
	}
}
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (29)

Showing the top 5 NuGet packages that depend on Shuttle.Esb:

Package Downloads
Shuttle.Esb.RabbitMQ

RabbitMQ implementation for use with Shuttle.Esb.

Shuttle.Esb.Tests

Test fixtures to facilitate testing of components, such as queues, that relate to Shuttle.Esb.

Shuttle.Esb.Process

Shuttle.Esb process management using Shuttle.Recall event sourcing.

Shuttle.Esb.Msmq

MSMQ implementation for use with Shuttle.Esb.

Shuttle.Esb.FileMQ

File-based queue implementation for use with Shuttle.Esb.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
15.0.0 873 8/5/2024
14.0.1 1,070 5/3/2024
14.0.0 699 4/30/2024
13.2.1 12,017 12/1/2022
13.2.0 9,452 9/16/2022
13.1.0 8,044 9/11/2022
13.0.0 7,953 9/4/2022
12.1.1 1,524 5/18/2022
12.1.0 1,344 5/18/2022
12.0.1 9,322 4/9/2022
12.0.0 8,456 3/21/2022
11.2.0 7,677 2/15/2021
11.1.1 1,536 2/9/2021
11.1.0 1,709 1/30/2021
11.0.3 12,152 1/17/2021
11.0.2 2,217 11/27/2020
11.0.1 18,644 7/31/2019
11.0.0 12,711 6/20/2019
10.1.8 2,780 12/26/2018
10.1.7 1,872 12/9/2018
10.1.6 38,205 10/15/2018
10.1.4 1,826 10/13/2018
10.1.2 4,028 10/6/2018
10.1.1 4,768 9/19/2018
10.1.0 2,312 9/17/2018
10.0.10 3,722 7/10/2018
10.0.9 2,175 7/8/2018
10.0.7 2,076 4/22/2018
10.0.6 2,847 4/12/2018
10.0.5 2,845 4/8/2018
10.0.3 8,432 2/13/2018
9.1.4 3,205 12/29/2017
9.1.3 2,094 10/22/2017
9.0.3 2,163 8/26/2017
9.0.2 3,623 8/6/2017
8.0.14 2,432 3/23/2018
8.0.13 4,615 12/29/2017
8.0.12 2,328 7/20/2017
8.0.11 2,130 7/17/2017
8.0.9 2,137 7/14/2017
8.0.8 2,734 7/6/2017
8.0.7 5,916 5/15/2017
8.0.5 2,385 5/7/2017
8.0.4 2,115 5/6/2017
8.0.3 2,363 5/6/2017
8.0.1 2,309 4/23/2017
8.0.0 8,072 3/24/2017
7.0.4 3,356 10/26/2016
7.0.3 2,895 10/4/2016
7.0.1 2,972 9/19/2016
7.0.0 2,303 9/4/2016
6.2.1 2,615 7/26/2016
6.2.0 2,916 7/23/2016
6.1.3 2,486 6/6/2016
6.1.2 2,215 6/4/2016
6.1.1 6,539 6/4/2016
6.1.0 2,806 6/4/2016
6.0.0 7,685 4/24/2016
5.1.9 5,366 4/3/2016
5.1.6 7,838 3/21/2016