了解zeromq java绑定

时间:2012-10-24 15:25:00

标签: java message-queue zeromq

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

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

  1. 为什么我需要安装任何东西?
  2. 我在一台机器上构建的罐子可以在另一个系统上运行吗?我需要这个应用程序是可移植的。
  3. 如果是这样,为什么我要开始建立自己的罐子?
  4. 我觉得zeromq上提供的说明需要基础熟悉构建我缺乏的C项目,所以也许我只是在密集,但这似乎很多工作。

3 个答案:

答案 0 :(得分:26)

作为ZeroMQ Java绑定的同伴,我表示同情。 ZeroMQ绝对是要管理的更具挑战性的Java依赖项之一。在它的核心,ZeroMQ是本机C代码,Java绑定是围绕到核心ZeroMQ库的JNI接口的(相对)轻量级包装器,这就是部署复杂的原因。

顺便说一句 - 如果ZeroMQ非常适合您的应用程序,那么它非常值得一试,因为它确实没有什么比这更好的了。不幸的是,这意味着您需要完成所有这些步骤才能使其正常工作,以便您可以决定它是否是您真正需要的。

ZeroMQ for Java基于三个组件:

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

我在一台机器上构建的jar是否会在另一台系统上运行?我需要这个应用程序是可移植的。

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

我对Linux的了解不足以说明构建在一个发行版上的DLL(比如Fedora)是否会在另一个发行版上运行(比如说Debian)。如果没有,那么你还有更多工作要做。

无论如何,您的应用程序将是可移植的 - ZeroMQ和JZMQ可以在大量平台上运行 - 但您需要严格控制部署过程,以确保在安装每个平台时,jar和相应的设置安装了DLL,它们安装在正确的位置。

  

为什么我需要安装任何东西?

从技术上讲,你没有。但我认为他们建议执行make install步骤,以便include和库文件是编译器所期望的位置,以便Java可以在运行程序时加载它们。

  

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

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

更重要的是 - 由于jar不够,你必须构建DLL,所以将jar和DLL组合起来更有意义。这样您就可以确定JNI包装器在C中实现了完全正确的本机方法,以匹配Java包装器类中的本机声明。

祝你好运。希望这会有所帮助。

答案 1 :(得分:1)

就我个人而言,我认为预先制作的JAR在帮助java中的0MQ方面会有很长的路要走。当我在许多站点使用Java时,他们不提供MSVS并且不得不经历如此冗长的设置只是为了得到一个dll和jar似乎对我有效。

答案 2 :(得分:1)

您还可以查看JeroMQ(libzmq的纯Java实现)。

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