2013-09-28 21 views
5

Sto utilizzando ZEROMQ per l'applicazione di messaggistica distribuita. È necessario connettere il client (socket DEALER) a più server (socket ROUTER sul lato server). Quali sono le mie opzioni sul lato CLIENT?zeromq DEALER client su più server (ROUTER)

  1. Creare il socket DEALER sul lato client per ciascun endpoint del server (socket ROUTER).
  2. Creare solo un socket DEALER sul lato client e aggiungere più endpoint.

Ho provato l'opzione 2 - connettendo a più endpoint ma il messaggio va sempre al primo endpoint collegato. seguiti seguenti fasi:

  • creano presa MERCANTE
  • collegano al primo estremo
  • poi in fase di esecuzione, aggiungere un altro endpoint alla presa utilizzando Socket.connect (endpoint). Devo ricollegarmi?

Nel socket del CONCESSIONARIO, non è possibile inviare messaggi su un particolare endpoint nel caso in cui sia collegato a più endpoint.

Qualche idea?

risposta

3

ZeroMQ codifica determinati comportamenti in tipi di socket. Questi riguardano principalmente:

  1. gestione più peer
  2. gestire i messaggi non recapitati
  3. movimentazione di throughput eccessivo (HWM)

Una presa commerciante è uno che può collegarsi a più peer, e usa LRU (usato da poco tempo, aka round-robin) per decidere quale peer riceve ogni messaggio. Se non vuoi questo comportamento, allora non vuoi un socket DEALER con più peer.

Se si vuole decidere quale tra pari riceve un messaggio, ci sono due opzioni per questo:

  1. creare un commerciante al pari, e inviare sulla presa appropriata
  2. creare un singolo router collegato a tutti peer e utilizzare i prefissi IDENTITY per instradare i messaggi. Potrebbe essere necessario passare IDENTITÀ tramite un canale laterale, al fine di utilizzare le connessioni ROUTER-ROUTER.

in fase di esecuzione, aggiungere un altro endpoint alla presa utilizzando socket.connect(endpoint). Devo ricollegarmi?

No, non è necessario riconnettersi. È possibile aggiungere (e rimuovere) peer in qualsiasi momento durante il programma.