Skip to content

Reliable Message Oriented Middleware Based on UDP

License

Notifications You must be signed in to change notification settings

Rotvig/HarakaMQ

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

😥 The message queue is currently not working at the moment I am working on fixing it. I am working on this branch https://github.com/Rotvig/HarakaMQ/tree/add_unit_tests 😥

HarakaMQ

Reliable Message Oriented Middleware Based on UDP

Guarantees

  • Message Delivery
  • Order of messages across distributed brokers
  • Eventual Consistency

Development

  • Fail over when a broker goes down in a cluster setup
  • Reconciliation when a broker rejoins a cluster
  • Broker and client auto discovery in a cluster setup
  • Add a new broker without restart of a cluster

Nuget

HarakaMQ.Client

https://www.nuget.org/packages/HarakaMQ.Client/

Message Broker

Start up the Broker by building the MessageBroker project, and runs it with the command "dotnet HarakaMQ.MessageBroker.dll". When running in a cluster setup have a seperate folder with the builded dll's for each broker you have. Remember to add a "settings.json" file in the running directory with this content:

{  
   "BrokerPort":11100,
   "PrimaryNumber":1,
   "AntiEntropyMilliseonds":1000,
   "RunInCLusterSetup":false,
   "Brokers":[]
}

Publish

var factory = new ConnectionFactory {HostName = "127.0.0.1", ListenPort = 11000, Port = 11100};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    channel.QueueDeclare("hello");
    channel.BasicPublish("hello", Encoding.UTF8.GetBytes("Hello world"));

    Console.WriteLine(" Press [enter] to exit.");
    Console.ReadLine();
}

Subscribe

var factory = new ConnectionFactory {HostName = "127.0.0.1", ListenPort = 12000, Port = 11100};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    channel.QueueDeclare("hello");
    var consumer = new DefaultBasicConsumer(channel);
    consumer.Received += (model, ea) =>
    {
        Console.WriteLine(Encoding.UTF8.GetString(ea.Body));
    };
    channel.BasicConsume("hello", consumer);

    Console.WriteLine(" Press [enter] to exit.");
    Console.ReadLine();
}

Test Repo

https://github.com/Rotvig/HarakaMQ-Benchmark