Kephas.Messaging.Distributed 11.1.0-dev.3

Prefix Reserved
This is a prerelease version of Kephas.Messaging.Distributed.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Kephas.Messaging.Distributed --version 11.1.0-dev.3                
NuGet\Install-Package Kephas.Messaging.Distributed -Version 11.1.0-dev.3                
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="Kephas.Messaging.Distributed" Version="11.1.0-dev.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Kephas.Messaging.Distributed --version 11.1.0-dev.3                
#r "nuget: Kephas.Messaging.Distributed, 11.1.0-dev.3"                
#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 Kephas.Messaging.Distributed as a Cake Addin
#addin nuget:?package=Kephas.Messaging.Distributed&version=11.1.0-dev.3&prerelease

// Install Kephas.Messaging.Distributed as a Cake Tool
#tool nuget:?package=Kephas.Messaging.Distributed&version=11.1.0-dev.3&prerelease                

Distributed messaging

The [[message processing|Architecture-of-messaging]] is an in-process feature, which is not per se bad, but in distributed scenarios it is limiting. The distributed messaging fills the gap by providing infrastructure components that can communicate in a such an environment.

Using the messaging infrastructure is a little more elaborate:

    // ensure the message has been sent
    await messageBroker.DispatchAsync(new RefreshCacheEvent { Key = "Users" }, ctx => ctx.OneWay()).PreserveThreadContext();   

This can be achieved in a simpler way, using the provided extension methods:

    // ensure the message has been sent
    await messageBroker.PublishAsync(new RefreshCacheEvent { Key = "Users" }).PreserveThreadContext();   

The distributed messaging flow

Distributed Messaging

The participants in the distributed message flow are:

  • The brokered message: This is the message being sent through the underlying infrastructure to the processors.
  • The message broker: This is the in-process component dispatching the messages by the means of the underlying infrastructure.
  • The brokered message handler: This is the [[message handler|Architecture-of-messaging#message-handlers]] on the other end, receiving the brokered message and ensuring that it is processed and, if requested, a proper response is sent back.
  • Infrastructure dependent components which:
    • send/queue messages.
    • read the messages and forward them to the in-process [[message processor|Architecture-of-messaging#the-message-processor]] .

Brokered message

A brokered message (IBrokeredMessage) is a specialization of a [[message|Architecture-of-messaging#messages]] carrying with it the original message to be processed and some distributed environment information. It can be regarded as an "envelope" transporting the actual message.

  • Content: the message to be actually processed.
  • Sender: contains information about the message sender. For some broadcasts, it can be used to not forward the message to the original sender.
  • Channel: contains the channel to use. If not provided, the default channel will be used.
  • IsOneWay: indicates whether the sender awaits an answer to the message, or is just a fire and forget scenario.
  • Timeout: the timeout for requests awaiting for a response.

The message broker

This is a [[singleton application service|Application-Services#shared-scope-shared-or-instance-based-services]] dispatching messages through a channel to registered processors.

The IMessageBroker service contract has the following methods:

  • DispatchAsync(object message, [optionsConfig: Action<IDispatchingContext>], [cancellationToken: CancellationToken]): Task<IMessage>: Dispatches the brokered message asynchronously.
    • Depending on the IsOneWay setting in the brokered message, it waits for a response or not.

InProcessMessageBroker

The in-process message broker is the Kephas implementation for a message broker dispatching the message to the in-process [[message processor|Architecture-of-messaging#the-message-processor]]. It has the [[lowest override priority|Application-Services#override-priority]].

This is the default message broker used when no custom one has been defined. It is recommended to use real-world implementations, using established message queuing infrastructure.

The brokered message handler

Brokered messages are nothing more than [[message|Architecture-of-messaging#messages]] requiring proper handling. The brokered message handler is the default implementation forwarding the contained message to the in-process [[message processor|Architecture-of-messaging#the-message-processor]].

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  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 (2)

Showing the top 2 NuGet packages that depend on Kephas.Messaging.Distributed:

Package Downloads
Kephas.Orchestration

Provides the infrastructure for orchestrating microservices based on the Kephas Framework. Typically used areas and classes/interfaces/services: - IOrchestrationManager, IRuntimeAppInfo. - Interaction: AppHeartbeatEvent, AppStartedEvent, AppStoppedEvent. - Endpoints: StopAppMessage. Kephas Framework ("stone" in aramaic) aims to deliver a solid infrastructure for applications and application ecosystems.

Kephas.Messaging.Distributed.Redis

Provides distributed message routing over Redis using StackExchange.Redis. Typically used areas and classes/interfaces/services: - RedisAppMessageRouter. Kephas Framework ("stone" in aramaic) aims to deliver a solid infrastructure for applications and application ecosystems.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
11.1.0 1,365 4/13/2022
11.1.0-dev.4 133 4/6/2022
11.1.0-dev.3 132 3/30/2022
11.1.0-dev.2 130 3/23/2022
11.1.0-dev.1 122 3/23/2022
11.0.0 1,262 3/11/2022
11.0.0-dev.7 134 3/7/2022
11.0.0-dev.6 130 2/28/2022
11.0.0-dev.5 124 2/26/2022
11.0.0-dev.4 139 2/24/2022
11.0.0-dev.3 125 2/23/2022
11.0.0-dev.2 134 2/18/2022
11.0.0-dev.1 129 2/7/2022
10.3.0 1,270 1/18/2022
10.2.0 1,205 12/3/2021
10.1.0 5,202 11/23/2021
10.1.0-dev.7 187 11/17/2021
10.1.0-dev.6 159 11/16/2021
10.1.0-dev.5 167 11/10/2021
10.1.0-dev.4 160 11/8/2021
10.1.0-dev.3 143 11/8/2021
10.1.0-dev.2 156 11/4/2021
10.1.0-dev.1 165 11/3/2021
10.0.1 863 10/16/2021
10.0.0 847 10/13/2021
10.0.0-dev.4 154 10/13/2021
10.0.0-dev.3 172 10/11/2021
10.0.0-dev.2 224 10/8/2021

Please check https://github.com/kephas-software/kephas/releases for the change log.
           Also check the documentation and the samples from https://github.com/kephas-software/kephas/wiki and https://github.com/kephas-software/kephas/tree/master/Samples.