一尘不染

了解ZeroMQ Java绑定

java

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

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

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

我感觉zeromq上提供的指令要求对我缺乏的构建C项目有基本的了解,所以也许我只是很忙,但这似乎需要大量工作。


阅读 247

收藏
2020-12-03

共1个答案

一尘不染

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

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

Java的ZeroMQ基于三个组件:

  • 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集都可以已安装,并且它们安装在正确的位置。

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

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

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

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

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

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

2020-12-03