当前位置: 首页 > 面试题库 >

了解ZeroMQ Java绑定

胡承载
2023-03-14
问题内容

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

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

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

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


问题答案:

作为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包装器类中的本机声明。

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



 类似资料:
  • 问题内容: 来自python线程文档 在CPython中,由于使用了全局解释器锁,因此只有一个线程可以一次执行Python代码(即使某些面向性能的库可以克服此限制)。如果希望您的应用程序更好地利用多核计算机的计算资源,建议您使用多处理。但是,如果您要同时运行多个I / O绑定任务,则线程化仍然是合适的模型。 现在我有一个这样的线程工作者 这里做两件事 使用库抓取网址 使用JavaScript库分析

  • 我正在 Websphere v8.5.5.0 上运行一个应用程序,并尝试使用日志作为我的日志记录框架。 当我尝试启动应用程序时,我收到了一个类似于此的错误: 正如答案所解释的,ibm库已经在类路径上包含了logback classic库的实现。我想了解最新的logback,所以想知道是否有人能告诉我如何手动选择要使用的绑定(不使用父类加载程序!)。

  • 本文向大家介绍js绑定事件和解绑事件,包括了js绑定事件和解绑事件的使用技巧和注意事项,需要的朋友参考一下 在js中绑定多个事件用到的是两个方法:attachEvent和addEventListener,但是这两个方法又存在差异性 attachEvent方法  只支持IE678,不兼容其他浏览器 addEventListener方法   兼容火狐谷歌,不兼容IE8及以下 addEventListe

  • 解绑设备 参数说明 字段 类型 必须? 说明 deviceId String 是 设备Id completion 是 结果回调 接口定义 Swift: RokidMobileSDK.device.unbindDevice(deviceId: String, completion: @escaping (_ error: RKError?) -> Void) Objc: [RokidMobileS

  • 解绑设备 接口说明 解绑设备 参数说明 字段 类型 必须? 说明 deviceId String 是 设备ID 示例代码: RokidMobileSDK.device.unbindDevice(deviceId, new IUnbindDeviceCallback() { @Override public void onUnbindDeviceSucceed() {

  • 我有一个用于OpenGL中模型渲染的纹理数组。此数组包含漫反射和镜面纹理。由于某些网格没有镜面纹理,因此我在每次渲染后简单地将NULL纹理绑定到我的镜面采样器,并且只有当网格具有镜面纹理时,我才绑定一个。但是,我仍然在没有镜面纹理的网格上看到镜面纹理。 这是我的渲染代码 材质索引保存数组中纹理的索引,如果网格没有镜面纹理 索引为-1 纹理单元0用于漫反射 纹理单元2用于镜面