java - ZeroMQ 重新排序

标签 java zeromq

我正在使用 DEALER (outboudSocket)、ROUTER (inboundSocket) 套接字来连接本地计算机上的两个应用程序。使用的协议(protocol)是tcp。我正在使用 java Zeromq 绑定(bind)和一个 NIO 线程:

ZMQ.Context zmqContext = ZMQ.context(1);

我在发送端有一个线程,在 while 循环中从阻塞队列中获取消息并执行发送:

private void send(String msg){
     outboundSocket.sendMore("");
     outboundSocket.send(msg);
}

接收端有一个线程,在 while 循环中从套接字获取消息并将其放入阻塞队列:

private String recv(){
    inboundSocket.recv();
    inboundSocket.recv();
    return new String(inboundSocket.recv());
}

是否可以保证消息永远不会被重新排序?

最佳答案

消息传递

有许多明确的警告,不要假设任何类型的有保证的消息传递(请阅读有关此主题的优秀书籍“Code Connected:第 1 卷”)

消息顺序

但是,应保留传入消息的顺序(由单个 NIO 线程下划线),因为在缓冲区管理上的 1 对 1 连接应用程序上不会发生抽奖、循环旋转木马逻辑(仍然没有策略来避免任何其他第 3 方 .connect() -ing .bind() 暴露的套接字访问点)

注意传输类开销

您无需浪费资源在一对仅本地主机连接的应用程序上部署 TCP 堆栈开销。如果传输类别可用,您是否尝试过速度/性能比较{ inproc: | TCP: | ... }

关于java - ZeroMQ 重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27687338/

相关文章:

java - Hibernate Criteria API 等同于 HQL select 子句?

java - 评估失败,因为线程未挂起

java - 从 Spring Boot 2.4.x 更新到 2.5.x 后 Jackson 模块未注册

java - 如何从 Java SUB 客户端 (ZMQ) 上的 python ZeroMQ PUB 服务器接收数据

sockets - ZeroMQ:如何将消息发送到特定的订户

python - 在死服务器上使用 ZeroMQ 时终止 python 脚本

java - BlockingQueue 类似不允许重复的容器

java - 如何在同一调试 session 中在 Eclipse 中调试 Java 和 Perl 代码?

ZeroMQ 管家模式

sockets - ZeroMQ REP套接字中的主题