Zero MQ jest wbudowaną biblioteką do messagingu. Jest łatwa do zintegrowania, pasuje do małych rozwiązań, ma niski koszt uruchomienia.
Jedną z wad jest to, że nie dostarcza wbudowanej serializacji, kompresji, szyfrowania i autentykacji. Nie może również zapewnić persystowania wiadomości na dysk. Dużą zaletą będzie szybkość przesyłania wiadomości, a co za tym idzie duża przepustowość.
Z poziomu języka C# mamy do dyspozycji clrzmq.dll (wrapper na libzmq.dll napisanej w C++). Bibliotekę najlepiej zainstalować za pomocą NuGeta.
Przykładowy kod wstawiający wiadomości do kolejki:
var context = new Context(); var socket = context.Socket(SocketType.PUSH); socket.Connect("tcp://localhost:5400"); for(var i = 0; i < 1000; i++) { socket.Send("message #" + i, Encoding.UTF8); System.Threading.Thread.Sleep(100); }
Kod jest bardzo prosty, jednak metoda Send przyjmuje tylko stringi lub tablice bajtów, stąd konieczność serializacji obiektów "we własnym zakresie". Wiadomości przechowywane będą w pamięci procesu hostującego. Podobnie wygląda to po stronie odbierającej wiadomości:
var context = new Context(); var socket = context.Socket(SocketType.PULL); socket.Bind("tcp://127.0.0.1:5400"); while (true) { var message = socket.Recv(Encoding.UTF8); Console.WriteLine("processed " + message); }
Warto zwrócić uwagę na to, że Bind nie działa dla adresu localhost, dlatego należy wpisać IP.
Context powinien być Singletonem. Tworzy on sockety i zapewnia komunikację międzyprocesową. Socket definiuje pattern komunikacyjny (PUSH,PULL,REQ,REP itd).
Brak komentarzy:
Prześlij komentarz