2012-10-24 45 views
19

我正在调查zeromq作为java项目中的消息传递解决方案,但是我发现有关java绑定的说明有些难以遵循。 http://www.zeromq.org/bindings:java了解zeromq java绑定

我不熟悉Java绑定,所以这可能是愚蠢的问题,但有人可以帮助我了解:

  1. 为什么我需要安装什么吗?
  2. 将罐子放在一台机器上工作在另一个系统上吗?我需要这个应用程序是可移植的。
  3. 如果是这样,为什么我需要建立自己的罐子开始?

我觉得提供zeromq的指示要求与我缺乏大厦C项目基地的熟悉,所以也许我只是被密集的,但是这似乎是一个大量的工作。

回答

25

从Java ZeroMQ结合资深用户,我很同情。 ZeroMQ绝对是要管理的更具挑战性的Java依赖项之一。在它的核心之中,ZeroMQ是本地C代码,Java绑定是一个(相对)轻量级的包装,它围绕核心ZeroMQ库的JNI接口,这就是为什么部署很复杂。

顺便说一句 - 如果ZeroMQ是一个很好的匹配你的应用程序,这是非常值得的麻烦,因为真的有什么能比得上它。不幸的是,这意味着您需要通过所有这些步骤才能使其工作,以便您可以决定是否真的需要它。

ZeroMQ for Java是基于三个组成部分:

  • libzmq - 核心ZeroMQ库(DLL - 任何语言,而不仅仅是Java的要求)
  • jzmq - Java绑定的本机部分( DLL)
  • zeromq.jar - Java绑定(JAR的Java的部分)

罐子我就建立在一个机器工作在另一个系统上?我需要这个应用程序是可移植的。

是的。该罐子将是便携式的。您可以在任何机器上构建它并将它部署在任何其他机器上。然而那是简单的部分。最难的部分是创建所需的各种DLL,这些DLL不可移植。假设你想支持Windows,Mac和Fedora Linux。您需要Windows,Mac和Fedora上的本机开发环境,并为您想要支持的每个平台构建DLL。

我不知道有足够的了解Linux的说一个DLL是否建立在一个分布(Fedora的说),将在另一个运行(说Debian的)。如果没有,那么你有更多的工作。不管怎样,您的应用程序将是可移植的 - ZeroMQ和JZMQ可以在大量平台上运行 - 但您需要对部署过程进行严格控制,以确保在安装每个平台时,jar和适当的安装了一组DLL,并将它们安装在正确的位置。

为什么我需要安装什么吗?

从技术上讲,你不这样做。但我认为他们建议您执行make install步骤,以便include和库文件是编译器期望的地方,并且还可以让Java在需要运行程序时加载它们。

如果是这样,为什么我需要建立自己的罐子开始?

我不是提交者,所以我不能肯定地说。我期望它的一部分是开发人员的效率 - 他们宁愿改进代码,而不是为可以自己创建罐子的用户创建罐子。

更重要的是 - 由于罐子不够用,所以无论如何您都必须构建DLL,所以将罐子和DLL构建在一起更有意义。这样,你可以确定JNI包装器在C中实现了正确的本地方法,以匹配Java包装类中的本地声明。

祝你好运。希望这可以帮助。

+0

谢谢你,圭多。这使得它更清晰! –

+5

或者你可以跳过这个麻烦,并使用[jeromq](https://github.com/zeromq/jeromq)这是一个普通的zeromq java端口。它甚至[更快](https://github.com/zeromq/jeromq/wiki/Perfomance)比在某些情况下的绑定 – drzymala

1

就我个人而言,我认为预先制作的JAR会在帮助java中的0MQ方面走很长的路。虽然我在许多网站上使用Java,但他们不提供MSVS,而只需要经过如此漫长的设置以获得一个dll,而jar对我来说似乎是反效果的。

0

你也可以看看JeroMQ(libzmq的纯Java实现)。

JeroMQ是一个完整的Java堆栈,它使用与ZeroMQ相同的协议和API,并且是社区的官方项目。它让Java用户的生活变得更简单,因为没有JNI,也没有C++可以构建。它执行ZeroMQ除PGM组播之外的所有功能。