ZeroMQ
# ZeroMQ

ZeroMQ (auch ØMQ, 0MQ oder ZMQ) ist eine asynchrone Nachrichtenaustauschbibliothek für High-throughput computing, die speziell auf Verteilte Systeme oder gleichzeitige Ausführung in verschiedenen Systemen entwickelt wurde. Es ist eine Message Queue, benötigt aber im Gegensatz zu Message Oriented Middleware keinen dedizierten Message Broker.

## Geschichte

Der erste Entwurf für ZeroMQ wurde von Pieter Hintjens im November 2007 geschrieben. iMatix bzw. Pieter Hintjens hat AMQP entwickelt, dieses wurde später als nicht wartbar und mit Designfehlern behaftet aufgegeben und ZeroMQ entwickelt. Deshalb zog sich iMatix aus der Entwicklung und den entsprechenden Gremien zurück. Bis 2012 war Martin Sustrik der führende Entwickler bei ZeroMQ, verließ aber das Projekt aufgrund von Bedenken wegen des Entwicklungsprozesses und des Copyrights für das Logo; er gründete daraufhin crossroads I/O. Sustrik überführte crossroads I/O in nanomsg und schrieb den Code komplett neu.

## Einsatzbereiche

In einem White Paper zur Marktanalyse wurden die möglichen Einsatzbereiche für ZeroMQ beschrieben:

* Hochleistungssegmente: Geringe Latenz, kostengünstig, Geschwindigkeitsvorteil bei der Verarbeitung
   * Handelsplattformen
   * Investmentbanken
   * Datensammler und -aufbereiter (z. B. Reuters)
   * Börsen (Aktien, Devisen, Rohstoffe)
* weitere Märkte:
   * Geschäfts- und Institutionelle Nachrichtenübermittlung (Bezahlplattformen, Dokumentenübermittlung)
   * Embedded systems (z. B. Echtzeit Messsysteme)
   * Multimedia (Streaming-Plattformen)
   * Grid-Computing (z. B. im Bereich der Risikoanalyse)

## Schnittstellen zu Programmiersprachen

Die Liste ist nicht vollständig und es werden nur die häufigsten Programmiersprachen genannt:

* C
* C# (.NET & Mono)
* C++
* Java
* Perl
* PHP
* Python
* Rust
* Ruby
* Erlang
* Node.js
* Haskell
* uvm.

## Software, bei der die Bibliothek eingesetzt wird

Zum Beispiel bei der Software Xibo (Software für Digital Signage) wird zeromq genutzt, um zwischen dem Content-Management-System und den Monitoren (Player) zu übermitteln (push).

In Firebird Butler soll die Bibliothek für den Abgleich und Kommunikation zwischen der Entwicklungsplattform und den Servern eingesetzt werden.

