了解 zeromq java binding

2022-09-02 03:50:24

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

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

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

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


答案 1

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

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

ZeroMQ for Java 基于三个组件:

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

我在一台机器上构建的 jar 可以在另一台系统上工作吗?我需要这个应用程序是可移植的。

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

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

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

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

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

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

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

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

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


答案 2

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


推荐