Akka ZeroMQExtension Req套接字发送程序

时间:2013-09-30 08:01:16

标签: scala akka zeromq

我有一个很小的Rep服务器,我能够使用以下代码成功发送消息:

import akka.actor.Actor
import akka.zeromq._
import org.zeromq.ZMQ
import akka.util.ByteString

class Sender extends Actor {

  override def preStart(): Unit = {
    val context = ZMQ.context(1)
    val socket = context.socket(ZMQ.REQ)
    socket.connect ("tcp://127.0.0.1:1234")
    socket.send("test".getBytes(), 0)
    println("Sent!")
    //val reqSocket =     ZeroMQExtension(context.system).newReqSocket(
    //                        Array(Connect("tcp://127.0.0.1:1234")))
    //reqSocket ! ZMQMessage(ByteString("test"))
  }

  def receive : Receive = {
    case _ =>
  }
}

但是,如果我使用注释掉的部分(并注释掉def中的所有其他内容),则服务器无法检测到任何消息。在使用ZeroMQExtension时,我是否应该使用其他类型的过程来发送消息?我正在使用ZeroMQ 2.2.0版。

供参考,这是服务器代码:

import akka.actor._
import akka.zeromq._

class ReplyActor extends Actor {
  def receive = {
    case _ =>
      println("Received something!")
  }
}

object Replyer extends App {
   val system = ActorSystem("zmq")
   val serverSocket = ZeroMQExtension(system).newRepSocket(
   Array(Bind("tcp://127.0.0.1:1234"),
         Listener(system.actorOf(Props[ReplyActor]))))
}

1 个答案:

答案 0 :(得分:1)

在您的服务器中,切换案例_ =>代码如下:

案例x => println(“msg is:”+ x)

然后,您会发现您的ReplyActor和您的发件人最终收到“正在连接”消息。我发现在收到此“正在连接”消息之前,您无法发送/接收任何内容。它只是意味着你实际连接。一旦你得到它,你就可以开始发送/接收消息了。

相关问题