(1)ZeroMQ: Java ZMQ库JeroMQ的用法(一)请求/响应模式
(2)ZeroMQ: Java ZMQ库JeroMQ的用法(二)发布/订阅模式
发布/订阅模式也十分好理解,一个服务器一直在那儿发布消息,其他N个客户端随便啥时候订阅一下服务器,就可以收到服务器之后发送的消息了。
和我们订阅公众号啥的可以看历史信息不同,默认的发布/订阅模式信息是会丢失的,就是没接受到的就没了。不过这个问题可以结合请求/响应模式来解决。
我们来看看简单的发布/订阅模式的用法,同样是两个类,Server和Client.
import org.zeromq.ZContext;
import org.zeromq.ZMQ;
import org.zeromq.ZSocket;
import java.util.Random;
public class Server {
public static void main(String[] args)
{
try (ZContext context = new ZContext()) {
ZMQ.Socket publisher = context.createSocket(ZMQ.PUB); //publish类型
publisher.bind("tcp://*:5555");
Random random = new Random();
while (true) {
String update;
//随机将update赋值为Time: 或Order: 开头的值
if (random.nextInt(10)<=5)
update = "Time: "+System.currentTimeMillis();
else
update = "Order: "+System.currentTimeMillis();
publisher.send(update); //发送
System.out.println("SEND:["+update+"]");
}
}
}
}
这是服务器,随机发送两种信息,一种是Time:开头的,一种是Order:开头的。
import org.zeromq.ZContext;
import org.zeromq.ZMQ;
public class Client {
public static void main(String args[]){
try(ZContext context= new ZContext()) {
ZMQ.Socket subscriber = context.createSocket(ZMQ.SUB); //subscribe类型
subscriber.connect("tcp://localhost:5555");
subscriber.subscribe("Time:".getBytes()); //只订阅Time: 开头的信息
for (int i = 0; i < 1000; i++) {
System.out.println(subscriber.recvStr()); //recvStr直接返回String,内部调用了recv,将byte数组转化为String
}
}
}
}
这个是客户端,.subscribe("Time:".getBytes())方法标明要订阅Time:开头的信息,对其他信息不关系。
总体还是很好理解很好操作的,没有什么复杂的地方。