我正在使用DEALER(outboudSocket),ROUTER(inboundSocket)套接字来连接本地计算机上的两个应用程序。使用的协议是tcp。我正在使用java zeromq绑定和一个NIO线程:
ZMQ.Context zmqContext = ZMQ.context(1);
我在发送端有一个线程,在while循环中从阻塞队列中获取消息并执行send:
private void send(String msg){
outboundSocket.sendMore("");
outboundSocket.send(msg);
}
接收端有一个线程,在while循环中从socket接收消息并将其放入阻塞队列:
private String recv(){
inboundSocket.recv();
inboundSocket.recv();
return new String(inboundSocket.recv());
}
是否有任何保证邮件永远不会被重新排序?
答案 0 :(得分:1)
有许多明确的警告不要假设任何类型的保证消息传递(阅读关于此主题的优秀书籍“Code Connected:Volume 1”)
然而,应该保留传入消息的顺序(由单个NIO线程强调),因为在缓冲区管理的1对1连接应用上没有彩票,没有循环旋转木马逻辑(仍然没有政策可以避免任何其他第三方.connect()
- .bind() - 公开的套接字访问点)
您不需要浪费资源来在一对仅连接本地主机的应用程序上部署TCP堆栈开销。如果传输类可用{ inproc: | TCP: | ... }