【发布时间】:2014-09-17 18:30:38
【问题描述】:
正在尝试测试 pub/sub 的简单实现。我发现如果我离开订阅者并发送消息,订阅者不会全部收到它们。有时全部收到,有时部分收到,有时整套未收到。
运行订阅服务器(让它一直运行),然后多次运行发布服务器。
import org.zeromq.ZMQ;
import org.zeromq.ZMQ.Context;
import org.zeromq.ZMQ.Socket;
public static void main (String[] args) {
// Prepare our context and subscriber
Context context = ZMQ.context(1);
Socket subscriber = context.socket(ZMQ.SUB);
subscriber.connect("tcp://localhost:5563");
subscriber.subscribe("B".getBytes());
System.out.println("Starting Subscriber..");
int i = 0;
while (true) {
String address = subscriber.recvStr();
String contents = subscriber.recvStr();
System.out.println(address+":"+new String(contents) + ": "+(i));
i++;
}
}
}
出版商:
import org.zeromq.ZMQ;
import org.zeromq.ZMQ.Context;
import org.zeromq.ZMQ.Socket;
public class TestPublisher {
public static void main (String[] args) throws Exception {
Context context = ZMQ.context(1);
Socket publisher = context.socket(ZMQ.PUB);
publisher.bind("tcp://*:5563");
System.out.println("Starting Publisher..");
publisher.setIdentity("B".getBytes());
publisher.setHWM(1000);
for (int i = 0; i < 10; i++) {
Thread.sleep(10l);
publisher.sendMore("B");
boolean isSent = publisher.send("We would like to see this:"+i);
System.out.println("Message was sent "+i+" , "+isSent);
}
Thread.sleep(1000);
publisher.close ();
context.term ();
}
}
【问题讨论】:
标签: java publish zeromq subscribe