理解zeromq的Java绑定

21

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

我不熟悉Java绑定,因此可能会有一些愚蠢的问题,请有人帮我理解:

  1. 为什么需要安装任何东西?
  2. 在一个机器上构建的jars是否可用于另一个系统? 我需要这个应用程序是可移植的。
  3. 如果可以,为什么需要先构建自己的jars?

我觉得zeromq提供的说明需要基本熟悉构建C项目,而我缺乏这方面的知识,所以也许只是我太蠢了,但这似乎很麻烦。

3个回答

27
作为 ZeroMQ 的 Java 绑定的用户,我深有同感。管理 ZeroMQ 是比较具有挑战性的 Java 依赖之一。ZeroMQ 本质上是本地 C 代码,Java 绑定是一个相对轻量级的包装器,围绕着核心 ZeroMQ 库的 JNI 接口,这就是为什么它难以部署的原因。
另外,如果 ZeroMQ 很适合您的应用程序,那么克服这些问题值得,因为确实没有其他东西可以与之媲美。不幸的是,这意味着您需要经历所有这些步骤,使其工作,以便您可以决定是否真正需要它。
Java 的 ZeroMQ 基于三个组件:
- libzmq - 核心 ZeroMQ 库(DLL - 任何语言都需要,不仅限于 Java) - jzmq - Java 绑定的本机部分 (DLL) - zeromq.jar - Java 绑定的 Java 部分(JAR)
引用:
“我在一台机器上构建的 jar 文件能否在另一台上运行?我需要应用程序可移植。”
是的。jar 文件是可移植的。您可以在任何机器上构建它,并在任何其他机器上部署它。然而,那只是简单的部分。困难的部分是创建所需的各种 DLL 文件,而这些文件是不可移植的。假设您想支持 Windows、Mac 和 Fedora Linux。您需要在Windows、Mac 和 Fedora 上拥有本地开发环境,并为每个要支持的平台构建 DLL。
我不太了解 Linux,无法确定在一个(比如 Fedora)上构建的 DLL 是否会在另一个(比如 Debian)上运行。如果不行,那么您还有更多的工作要做。
总之,您的应用程序将是可移植的 - ZeroMQ 和 JZMQ 可以在大量平台上运行,但您需要严格控制部署过程,以确保当您安装每个平台时,jar 文件和适当的一组 DLL 文件被安装,并且它们被安装在正确的位置。
引用:
“为什么我需要安装任何东西?”

从技术上讲不需要,但我认为他们建议执行make install步骤,这样编译器期望的包含和库文件就在那里,并且在运行程序时Java也可以加载它们。

如果是这样,为什么我需要首先构建自己的jars呢?

我不是一个提交者,所以不能确定。我想其中一部分原因是为了提高开发效率-他们宁愿改善代码,而不是为用户创建jar包,而用户也可以自己创建jar包。

更重要的是-由于JAR文件不足,你还必须构建DLL文件,所以将JAR和DLL文件一起构建才更有意义。这样,您可以确保JNI包装器在C语言中实现了与Java包装器类中本地声明完全匹配的本机方法。

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


5
您可以选择使用jeromq,它是zeromq的纯Java移植版。在某些情况下,它甚至比绑定库更快速 - drzymala

1
你还可以查看JeroMQ(libzmq的纯Java实现)。
JeroMQ是一个完整的Java堆栈,使用与ZeroMQ相同的协议和API,并且是社区的官方项目。对于Java用户来说,它使生活变得更加简单,因为没有JNI,也没有需要构建的C++。除了PGM多播之外,它可以做到ZeroMQ所能做的一切。

1
我个人认为预制的JAR包会在Java中对0MQ有很大帮助。虽然我在许多场所都使用Java,但它们不提供MSVS,必须经过漫长的设置才能获得dll和jar,这似乎是逆生产力的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接