我有以下「hello world」jeromq PUSH-PULL客戶端和服務器。只有在設置了高水位標記值後,我才能夠傳輸而不會丟失消息。JeroMq丟棄消息 - 如何防止?
import org.jeromq.ZMQ;
public class TestTcpServer {
public static void main(String[] args) {
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.PULL);
System.out.println("Binding TCP server on port 5555");
//socket.setRcvHWM(100_000);
socket.bind("tcp://*:5555");
int x;
x = 0;
while (true) {
x++;
byte[] raw = socket.recv(0);
String rawMessage = new String(raw);
if (x > 99_997) {
System.out.println(x);
System.out.println(rawMessage);
}
}
}
}
//client
import java.io.IOException;
import org.jeromq.ZMQ;
public class TestTcpClient {
/**
* @param args
* @throws InterruptedException
* @throws IOException
*/
public static void main(String[] args) throws InterruptedException,
IOException {
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.PUSH);
socket.connect("tcp://localhost:5555");
//socket.setRcvHWM(100_000);
System.out.println("Sending 100 000 transactions over TCP..."); long start = System.currentTimeMillis();
for (int request_nbr = 0; request_nbr != 100_000; request_nbr++) {
String requestString = "message";
byte[] request = requestString.getBytes();
boolean success = socket.send(request, 0);
if (!success) {
System.out.println("sending message failed!");
}
}
long end = System.currentTimeMillis();
System.out.print("Time: ");
System.out.print(end - start);
System.out.println(" ms");
socket.close();
context.term();
}
}
據0Mq documentation,達到高水位時僅PUB插座將下降的消息。由於我使用PUSH-PULL套接字,爲什麼消息被丟棄?
在我看來,HWM是系統的一個動態屬性,所以儘管我已經能夠在這個hello世界示例中解析丟棄的消息,但是我不知道我是否可以指望jeromq不要在真實世界中丟棄消息情況?
我嘗試了靈兒設置沒有任何影響,會嘗試最新的快照。 – Dan