2012-11-04 100 views
1

我有以下「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不要在真實世界中丟棄消息情況?

回答

0

謝謝你的報告。

是的,PUSH/PULL不能丟棄消息。

對於ZMTP 2.0支持的最新飛躍有一個錯誤。

請嘗試使用最新的快照。

另外,我會建議你在客戶端添加socket.setLinger(some_milli_seconds)當你想發送消息後退出應用程序。

+0

我嘗試了靈兒設置沒有任何影響,會嘗試最新的快照。 – Dan