MakoIoT.Device.Services.Messaging
1.0.60.8871
See the version list below for details.
dotnet add package MakoIoT.Device.Services.Messaging --version 1.0.60.8871
NuGet\Install-Package MakoIoT.Device.Services.Messaging -Version 1.0.60.8871
<PackageReference Include="MakoIoT.Device.Services.Messaging" Version="1.0.60.8871" />
paket add MakoIoT.Device.Services.Messaging --version 1.0.60.8871
#r "nuget: MakoIoT.Device.Services.Messaging, 1.0.60.8871"
// Install MakoIoT.Device.Services.Messaging as a Cake Addin #addin nuget:?package=MakoIoT.Device.Services.Messaging&version=1.0.60.8871 // Install MakoIoT.Device.Services.Messaging as a Cake Tool #tool nuget:?package=MakoIoT.Device.Services.Messaging&version=1.0.60.8871
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:
- Synchronously - receiving subsequent messages is blocked until current message ends processing.
- FIFO - received messages are put onto a queue and processed in order.
- 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 | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net is compatible. |
-
- MakoIoT.Device.Services.Interface (>= 1.0.47.44904)
- MakoIoT.Device.Utilities.String (>= 1.0.37.35071)
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.DependencyInjection (>= 1.1.11)
- nanoFramework.Json (>= 2.2.152)
- nanoFramework.System.Collections (>= 1.5.45)
- nanoFramework.System.IO.Streams (>= 1.1.59)
- nanoFramework.System.Text (>= 1.2.54)
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.61.65061 | 0 | 11/26/2024 |
1.0.60.8871 | 34 | 11/25/2024 |
1.0.59.39628 | 56 | 11/19/2024 |
1.0.58.46908 | 79 | 10/31/2024 |
1.0.57.41830 | 122 | 10/19/2024 |
1.0.56.35619 | 120 | 10/18/2024 |
1.0.55.53831 | 81 | 10/16/2024 |
1.0.54.17802 | 80 | 9/30/2024 |
1.0.53.63834 | 80 | 9/26/2024 |
1.0.52.58630 | 92 | 9/20/2024 |
1.0.51.33981 | 107 | 9/12/2024 |
1.0.50.7227 | 101 | 9/5/2024 |
1.0.49.65299 | 98 | 8/28/2024 |
1.0.48.4709 | 94 | 8/27/2024 |
1.0.47.29483 | 114 | 8/11/2024 |
1.0.46.26755 | 104 | 8/10/2024 |
1.0.45.44465 | 72 | 8/5/2024 |
1.0.44.59575 | 99 | 6/12/2024 |
1.0.43.12089 | 103 | 5/18/2024 |
1.0.42.33950 | 112 | 5/17/2024 |
1.0.41.841 | 126 | 4/9/2024 |
1.0.40.35009 | 106 | 4/8/2024 |
1.0.39.27363 | 115 | 4/3/2024 |
1.0.38.33544 | 115 | 3/22/2024 |
1.0.37.6157 | 105 | 3/21/2024 |
1.0.36.17910 | 184 | 1/6/2024 |
1.0.35.19216 | 140 | 12/30/2023 |
1.0.34.20615 | 154 | 12/2/2023 |
1.0.33.8822 | 137 | 12/1/2023 |
1.0.32.53741 | 147 | 11/17/2023 |
1.0.31.63629 | 126 | 11/11/2023 |
1.0.30.34678 | 123 | 11/11/2023 |
1.0.29.45728 | 124 | 10/9/2023 |
1.0.28.38941 | 144 | 10/6/2023 |
1.0.27.18901 | 142 | 10/4/2023 |
1.0.25.29211 | 179 | 5/29/2023 |
1.0.24.44332 | 157 | 5/25/2023 |
1.0.20.4309 | 145 | 5/22/2023 |
1.0.19.42541 | 149 | 5/22/2023 |