MakoIoT.Device.Services.Messaging 1.0.73.3184

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.73.3184
                    
NuGet\Install-Package MakoIoT.Device.Services.Messaging -Version 1.0.73.3184
                    
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.73.3184" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MakoIoT.Device.Services.Messaging" Version="1.0.73.3184" />
                    
Directory.Packages.props
<PackageReference Include="MakoIoT.Device.Services.Messaging" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MakoIoT.Device.Services.Messaging --version 1.0.73.3184
                    
#r "nuget: MakoIoT.Device.Services.Messaging, 1.0.73.3184"
                    
#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.
#addin nuget:?package=MakoIoT.Device.Services.Messaging&version=1.0.73.3184
                    
Install MakoIoT.Device.Services.Messaging as a Cake Addin
#tool nuget:?package=MakoIoT.Device.Services.Messaging&version=1.0.73.3184
                    
Install MakoIoT.Device.Services.Messaging as a Cake Tool

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.76.47396 0 an hour ago
1.0.75.54889 130 13 days ago
1.0.74.58895 148 22 days ago
1.0.73.3184 148 23 days ago
1.0.72.37069 192 a month ago
1.0.71.58660 100 a month ago
1.0.67.58431 100 a month ago
1.0.66.61791 85 a month ago
1.0.65.9968 95 2 months ago
1.0.63.58350 97 4 months ago
1.0.62.39147 84 4 months ago
1.0.61.65061 94 4 months ago
1.0.60.8871 92 4 months ago
1.0.59.39628 94 4 months ago
1.0.58.46908 99 5 months ago
1.0.57.41830 139 5 months ago
1.0.56.35619 136 5 months ago
1.0.55.53831 95 6 months ago
1.0.54.17802 93 6 months ago
1.0.53.63834 96 6 months ago
1.0.52.58630 111 6 months ago
1.0.51.33981 120 7 months ago
1.0.50.7227 112 7 months ago
1.0.49.65299 110 7 months ago
1.0.48.4709 109 7 months ago
1.0.47.29483 128 8 months ago
1.0.46.26755 115 8 months ago
1.0.45.44465 85 8 months ago
1.0.44.59575 113 10 months ago
1.0.43.12089 113 5/18/2024
1.0.42.33950 122 5/17/2024
1.0.41.841 134 4/9/2024
1.0.40.35009 115 4/8/2024
1.0.39.27363 122 4/3/2024
1.0.38.33544 123 3/22/2024
1.0.37.6157 112 3/21/2024
1.0.36.17910 191 1/6/2024
1.0.35.19216 147 12/30/2023
1.0.34.20615 162 12/2/2023
1.0.33.8822 144 12/1/2023
1.0.32.53741 156 11/17/2023
1.0.31.63629 134 11/11/2023
1.0.30.34678 134 11/11/2023
1.0.29.45728 131 10/9/2023
1.0.28.38941 153 10/6/2023
1.0.27.18901 149 10/4/2023
1.0.25.29211 192 5/29/2023
1.0.24.44332 168 5/25/2023
1.0.20.4309 156 5/22/2023
1.0.19.42541 161 5/22/2023