我一直使用ActiveMQ或RabbitMQ,但最近因为受到关注而开始深入挖掘ZeroMQ。如果我正在阅读的内容是正确的,那么它似乎是一个消息代理以及进程间通信(IPC)的机制?
我有一种情况,我有2个Java进程需要在同一台机器上相互通信。我不想使用共享文件方法,因为它们之间的对话/协议非常复杂,文件解决方案看起来很笨拙。
所以我 开始使用像Netty或MINA这样的东西来定义我自己的通信协议,并让它们通过端口进行交谈,但后来我开始阅读关于ZeroMQ和am想知道我是否能以相同的工作完成同样的工作。
所以我问:ZeroMQ可以用于Java进程之间的IPC,如果有的话,是否有任何具体的代码示例或文章解释如何做到这一点?
答案 0 :(得分:3)
web site的前三行告诉你需要知道的每一件事。
分布式计算变得简单
Ø作为并发框架的套接字库。
Ø跨进程,IPC,TCP和多播传递消息。
我认为没有任何理由可以怀疑这不会对环回起作用,如果不能这样做会非常棒。
答案 1 :(得分:2)
是的,zmq可用于连接两个Java进程。您可以将纯Java实现JeroMq或ZeroMq与Java客户端一起使用。 JeroMq更易于安装,因为您只需要适当的依赖项。以下是监听器的简单示例:
import org.zeromq.ZMQ;
public class Subscriber {
public static void main(String[] a){
final ZMQ.Context ctx = ZMQ.context(1);
final ZMQ.Socket sub = ctx.socket(ZMQ.SUB);
// sub.connect("tcp://localhost:6001");
sub.connect("ipc://001");
sub.subscribe("".getBytes());
while (true){
String msg = sub.recvStr();
System.out.println(msg);
}
}
}
和发布商:
import org.zeromq.ZMQ;
public class Publisher {
public static void main(String[] a) throws InterruptedException {
final ZMQ.Context ctx = ZMQ.context(1);
final ZMQ.Socket pub = ctx.socket(ZMQ.PUB);
pub.bind("ipc://001");
// pub.bind("tcp://*:6001");
while (true){
System.out.println("Publishing");
pub.send("Test");
Thread.sleep(1000);
}
}
}
IPC和TCP都有效。