Router Hanging in Dealer-Router Setup

半城伤御伤魂 提交于 2020-01-05 04:43:31

问题


Given the following attempt to connect 1 DEALER to 1 ROUTER:

package net.async

import org.zeromq.ZMQ
import org.zeromq.ZMQ.Socket

import scala.annotation.tailrec

object Client {
  val Empty           = "".getBytes
  def message(x: Int) = s"HELLO_#$x".getBytes
  val Count   = 5
}

class Client(name: String) extends Runnable {

  import Client._
  import AsyncClientServer.Port

  override def run(): Unit = {
    val context = ZMQ.context(1)
    val dealer = context.socket(ZMQ.DEALER)
    dealer.setIdentity(name.getBytes)
    dealer.connect(s"tcp://localhost:$Port")
    runHelper(dealer, Count)
  }

  @tailrec
  private def runHelper(dealer: Socket, count: Int): Unit = {
    dealer.send(dealer.getIdentity, ZMQ.SNDMORE)
    dealer.send(Empty,              ZMQ.SNDMORE)
    dealer.send(message(count),     0)
    println(s"Dealer: ${dealer.getIdentity} received message: " + dealer.recv(0))
    runHelper(dealer, count - 1)
  }
}

object AsyncClientServer {

  val Port = 5555

  val context = ZMQ.context(1)
  val router = context.socket(ZMQ.ROUTER)

  def main(args: Array[String]): Unit = {
    router.bind(s"tcp://*:$Port")
    mainHelper()
    new Thread(new Client("Joe")).start()
  }

  private def mainHelper(): Unit = {
    println("Waiting to receive messages from Dealer.")
    val identity = router.recv(0)
    val empty    = router.recv(0)
    val message  = router.recv(0)

    println(s"Router received message, ${new String(message)} from sender: ${new String(identity)}.")
    mainHelper()
  }
}

I see the following output, hanging on the second message.

[info] Running net.async.AsyncClientServer
[info] Waiting to receive messages from Dealer.

Why is that?


回答1:


Not sure if its the cause of your problem but you don't need to send the identity frame from your dealer, zeromq will do this for you. By adding it your actually sending a 4 part message.

IDENTITY
IDENTITY
EMPTY
CONTENT


来源:https://stackoverflow.com/questions/38841182/router-hanging-in-dealer-router-setup

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!