21

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

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

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

我觉得 zeromq 上提供的说明需要基本熟悉构建我缺乏的 C 项目,所以也许我只是很密集,但这似乎需要做很多工作。

4

3 回答 3

27

作为 ZeroMQ 的 Java 绑定的用户,我很同情。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 的了解还不够,无法说明构建在一个发行版(比如 Fedora)上的 DLL 是否会在另一个发行版(比如 Debian)上运行。如果没有,那么您还有更多工作要做。

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

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

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

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

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

更重要的是 - 由于 jar 是不够的,而且无论如何您都必须构建 DLL,因此将 jar 和 DLL 一起构建更有意义。这样您就可以确定 JNI 包装器在 C 中实现了完全正确的本机方法,以匹配 Java 包装器类中的本机声明。

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

于 2012-10-24T16:40:42.923 回答
1

就我个人而言,我确实认为预制的 JAR 将对帮助 Java 中的 0MQ 大有帮助。虽然我在许多站点使用 Java 工作,但它们不提供 MSVS,并且为了获得 dll 和 jar 而必须经历如此冗长的设置对我来说似乎适得其反。

于 2015-04-01T10:55:32.853 回答
1

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

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

于 2016-03-02T19:27:33.097 回答