HareIsle 2.0.0

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

// Install HareIsle as a Cake Tool
#tool nuget:?package=HareIsle&version=2.0.0                

HareIsle

IPC .NET library powered by RabbitMQ. Provides RPC query, broadcast, and queue processing functionality.

Using

Install NuGet package:

dotnet add package HareIsle

Add using derective:

using RabbitMQ.Client;
using Usefull.HareIsle;

Create RabbitMq connection factory:

ConnectionFactory connectionFactory = new()
{
    Uri = new Uri("amqp://user:pass@rabbithost:5672/"),
    ConsumerDispatchConcurrency = 10,
    AutomaticRecoveryEnabled = true,
    TopologyRecoveryEnabled = true,
    RequestedHeartbeat = TimeSpan.FromSeconds(10)
};

Scenario: broadcasting

Create the broadcast message handler:

// RabbitMq connection
using var connection = await connectionFactory.CreateConnectionAsync();
// Message handler
using var handler = new BroadcastHandler<SomeMessage>(
  "Handler actor ID",  // ID of the actor on whose behalf the message is processed
  connection,          // RabbitMq connection
  "Broadcast ID",      // ID of the actor on whose behalf messages are broadcast
  message =>           // handling function           
  {
    // do some handling
  });
Console.ReadKey();    // message listening stops when press a key

Publish the broadcast message:

// Create the broadcast publisher
using var emitter = new Emitter("Broadcast ID", connection);
// Publish the message
await emitter.BroadcastAsync(new SomeMessage
{
    Message = "some text",
    Value = 123
});

Scenario: queue handling

Create the queue handler:

// RabbitMq connection
using var connection = await connectionFactory.CreateConnectionAsync();
// Message handler
using var handler = new QueueHandler<SomeMessage>(
  "Handler actor ID",  // ID of the actor on whose behalf the message is processed
  connection,          // RabbitMq connection
  "QueueName",         // queue name
  5,                   // concurrency factor
  message =>           // handling function           
  {
    // do some handling
  });
Console.ReadKey();    // queue listening stops when press a key

Place the message in the queue:

using var emitter = new Emitter("SomeActorID", connection);  // create the emmiter
await emitter.DeclareQueueAsync("QueueName");  // declare the queue
await emitter.EnqueueAsync("QueueName", new SomeMessage  // send the message
{
    Text = "some text"
});

Scenario: RPC

Create the RPC handler:

// RabbitMq connection
using var connection = await connectionFactory.CreateConnectionAsync();
// RPC handler
using var handler = new RpcHandler<Request, Response>(
  "Actor ID",          // ID of the actor on whose behalf the RPC is processed
  connection,          // RabbitMq connection
  5,                   // concurrency factor
  reques =>            // RPC handling function           
  {
    // do some handling
  });
Console.ReadKey();    // message listening stops when press a key

Make the RPC and get a response:

using var rpcClient = new RpcClient("ClientID", connection);
var request = new Request
{
    Value = 123,
    Text = "some text"
};
var response = await rpcClient.CallAsync<Request, Response>("Actor ID", request);
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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.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
2.0.0 63 1/27/2025
1.0.0 106 7/12/2024