两个JVM进程可以使用ZeroMQ在同一台机器上进行通信吗?

时间:2014-03-06 01:38:19

标签: java tcp jvm ipc zeromq

我一直使用ActiveMQ或RabbitMQ,但最近因为受到关注而开始深入挖掘ZeroMQ。如果我正在阅读的内容是正确的,那么它似乎是一个消息代理以及进程间通信(IPC)的机制?

我有一种情况,我有2个Java进程需要在同一台机器上相互通信。我不想使用共享文件方法,因为它们之间的对话/协议非常复杂,文件解决方案看起来很笨拙。

所以我 开始使用像Netty或MINA这样的东西来定义我自己的通信协议,并让它们通过端口进行交谈,但后来我开始阅读关于ZeroMQ和am想知道我是否能以相同的工作完成同样的工作。

所以我问:ZeroMQ可以用于Java进程之间的IPC,如果有的话,是否有任何具体的代码示例或文章解释如何做到这一点?

2 个答案:

答案 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都有效。