Shuttle.Esb.Sql.Subscription 16.0.0

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

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

SQL

PM> Install-Package Shuttle.Esb.Sql.Subscription

Contains a sql-based ISubscriptionService implementation. The subscription service caches all subscriptions but a timeout for the cache may be set. If you need to be sure that a new subscriber is picked up by a publisher the safest is to restart the relevant publisher(s).

Registration

The required components may be registered by calling:

services.AddSqlSubscription();

The SubscriptionService that implements the ISubscriptionService interface makes use of the SubscriptionOptions configured with the ServiceBusOptions to register, or ensure, any subscriptions:

services.AddServiceBus(builder => {
	builder.Subscription.SubscribeType = SubscribeType.Normal; // default
    builder.Subscription.ConnectionString = "Subscription"; // default

    // add subscription to message types directly; else below options on builder
    builder.Subscription.MessageTypes.Add(messageType);

    // using type
    builder.AddSubscription(typeof(Event1));
    builder.AddSubscription(typeof(Event2));

    // using a full type name
    builder.AddSubscription(typeof(Event1).FullName);
    builder.AddSubscription(typeof(Event2).FullName);

    // using a generic
    builder.AddSubscription<Event1>();
    builder.AddSubscription<Event2>();
});

And the JSON configuration structure:

{
  "Shuttle": {
    "ServiceBus": {
      "Subscription": {
        "SubscribeType": "Normal",
        "ConnectionStringName": "connection-string",
        "CacheTimeout": "00:05:00",
        "MessageTypes": [
          "message-type-a",
          "message-type-b"
        ]
      }
    }
  }
}

Options

Option Default Description
ConnectionStringName Subscription The name of the ConnectionString to use to connect to the subscription store.
SubscribeType Normal Indicates subscriptions are dealt with: <br/>- Normal is the default and will subscribe to the given message type(s) if they have not been subscribed to yet.<br/>- Ensure will check to see that the subscription exists and if not will throw an ApplicationException.<br/>- Ignore will simply ignore the subscription request.
CacheTimeout 00:05:00 How long event subscribers should be cached for before refreshing the list.

Should the endpoint be configured as a worker no new subscriptions will be registered against the endpoint since any published events should be subscribed to only by the distributor endpoint. When using a broker all the endpoints feed off the same work queue uri and any of the endpoints could create the subscription.

When moving to a non-development environment it is recommended that you make use of the Ensure option for the SubscribeType.

Supported providers

  • Microsoft.Data.SqlClient
  • System.Data.SqlClient
  • Npgsql / thanks to hopla

If you'd like support for another SQL-based provider please feel free to give it a bash and send a pull request if you do go this route. You are welcome to create an issue and assistance will be provided where possible.

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

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
16.0.0 461 8/5/2024
15.0.1 111 7/16/2024
14.0.1 389 5/3/2024
14.0.0 121 4/30/2024
13.2.2 3,807 12/1/2022
13.2.1 459 11/26/2022
13.2.0 536 9/16/2022
13.1.0 441 9/11/2022
13.0.0 443 9/4/2022
12.1.0 464 8/25/2022
12.0.2 635 4/9/2022
12.0.1 475 4/9/2022
12.0.0 474 3/21/2022
11.0.4 846 1/21/2021
11.0.1 705 4/16/2020
11.0.0 4,420 6/21/2019
10.1.3 4,215 11/26/2018
10.1.2 1,481 9/17/2018
10.0.1 1,803 7/7/2018
10.0.0 1,834 2/13/2018
9.0.1 986 11/12/2017
9.0.0 998 8/6/2017
8.0.2 1,367 5/7/2017
8.0.0 1,007 3/24/2017