MakoIoT.Device.Services.Messaging 1.0.62.39147

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

// Install MakoIoT.Device.Services.Messaging as a Cake Tool
#tool nuget:?package=MakoIoT.Device.Services.Messaging&version=1.0.62.39147                

Mako-IoT.Device.Services.Messaging

Message bus with pub-sub and stronly typed data contracts.

Main concepts

Message routing

There are two type of routes:

  • Broadcast messages are published under topics and delivered to one or more subscribers. This is usually used for propagating events.
  • Direct message is delivered to single recipient. This is usually used for sending commands. Routing is done automatically based on message types.

Message contracts

Message contracts are classes that implement IMessage interface. MessageType must be set to full type name of the class.

public class BlinkCommand : IMessage
{
    public BlinkCommand()
    {
        MessageType = this.GetType().FullName;
    }
    public bool LedOn { get; set; }
    public string MessageType { get; set; }
}

Consumers

Messages are delivered to consumer classes.

public class BlinkCommandConsumer : IConsumer
{
    private readonly IBlinker _blinker;
    private readonly ILogger _logger;

    public BlinkCommandConsumer(IBlinker blinker, ILogger logger)
    {
        _blinker = blinker;
        _logger = logger;
    }

    public void Consume(ConsumeContext context)
    {
        var cmd = (BlinkCommand)context.Message;
        _logger.LogDebug($"Setting LED to {cmd.LedOn}");
        _blinker.Set(cmd.LedOn);
    }
}

Consumers are registered against message types in DeviceBuilder with AddDirectMessageConsumer or AddSubscriptionConsumer

public static void Main()
{
    DeviceBuilder.Create()
        .AddMessageBus(o =>
        {
            o.AddDirectMessageConsumer(typeof(BlinkCommand), typeof(BlinkCommandConsumer), ConsumeStrategy.LastMessageWins);
        })
   //[...]
Consume strategies

Consuming multiple messages of same type (i.e. by single consumer) may be done in one of three fashions:

  1. Synchronously - receiving subsequent messages is blocked until current message ends processing.
  2. FIFO - received messages are put onto a queue and processed in order.
  3. Last Message Wins - the most recent message is processed and older unprocessed messages are discarded. This equivalent to bulkhead resilience pattern with single concurrent action.

Sending messages

bus.Send(msg, "device1"); //sends direct message to "device1"
bus.Publish(msg); //publishes broadcast message

Interoperability with .NET

With .NET implementation of message bus you can easily communicate between nanoFramework devices and .NET services or application. Data contract classes can be shared across both parties. See messaging sample.

Product Compatible and additional computed target framework versions.
.NET Framework net is compatible. 
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
1.0.63.58350 39 11/28/2024
1.0.62.39147 35 11/27/2024
1.0.61.65061 62 11/26/2024
1.0.60.8871 70 11/25/2024
1.0.59.39628 72 11/19/2024
1.0.58.46908 81 10/31/2024
1.0.57.41830 124 10/19/2024
1.0.56.35619 122 10/18/2024
1.0.55.53831 83 10/16/2024
1.0.54.17802 82 9/30/2024
1.0.53.63834 82 9/26/2024
1.0.52.58630 94 9/20/2024
1.0.51.33981 109 9/12/2024
1.0.50.7227 103 9/5/2024
1.0.49.65299 100 8/28/2024
1.0.48.4709 96 8/27/2024
1.0.47.29483 116 8/11/2024
1.0.46.26755 106 8/10/2024
1.0.45.44465 74 8/5/2024
1.0.44.59575 101 6/12/2024
1.0.43.12089 105 5/18/2024
1.0.42.33950 114 5/17/2024
1.0.41.841 128 4/9/2024
1.0.40.35009 108 4/8/2024
1.0.39.27363 117 4/3/2024
1.0.38.33544 117 3/22/2024
1.0.37.6157 107 3/21/2024
1.0.36.17910 186 1/6/2024
1.0.35.19216 142 12/30/2023
1.0.34.20615 156 12/2/2023
1.0.33.8822 139 12/1/2023
1.0.32.53741 149 11/17/2023
1.0.31.63629 128 11/11/2023
1.0.30.34678 125 11/11/2023
1.0.29.45728 126 10/9/2023
1.0.28.38941 146 10/6/2023
1.0.27.18901 144 10/4/2023
1.0.25.29211 181 5/29/2023
1.0.24.44332 159 5/25/2023
1.0.20.4309 147 5/22/2023
1.0.19.42541 151 5/22/2023