我有一个很小的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]))))
}
答案 0 :(得分:1)
在您的服务器中,切换案例_ =>代码如下:
案例x => println(“msg is:”+ x)
然后,您会发现您的ReplyActor和您的发件人最终收到“正在连接”消息。我发现在收到此“正在连接”消息之前,您无法发送/接收任何内容。它只是意味着你实际连接。一旦你得到它,你就可以开始发送/接收消息了。