从Java ZeroMQ结合资深用户,我很同情。 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的说一个DLL是否建立在一个分布(Fedora的说),将在另一个运行(说Debian的)。如果没有,那么你有更多的工作。不管怎样,您的应用程序将是可移植的 - ZeroMQ和JZMQ可以在大量平台上运行 - 但您需要对部署过程进行严格控制,以确保在安装每个平台时,jar和适当的安装了一组DLL,并将它们安装在正确的位置。
为什么我需要安装什么吗?
从技术上讲,你不这样做。但我认为他们建议您执行make install
步骤,以便include和库文件是编译器期望的地方,并且还可以让Java在需要运行程序时加载它们。
如果是这样,为什么我需要建立自己的罐子开始?
我不是提交者,所以我不能肯定地说。我期望它的一部分是开发人员的效率 - 他们宁愿改进代码,而不是为可以自己创建罐子的用户创建罐子。
更重要的是 - 由于罐子不够用,所以无论如何您都必须构建DLL,所以将罐子和DLL构建在一起更有意义。这样,你可以确定JNI包装器在C中实现了正确的本地方法,以匹配Java包装类中的本地声明。
祝你好运。希望这可以帮助。
谢谢你,圭多。这使得它更清晰! –
或者你可以跳过这个麻烦,并使用[jeromq](https://github.com/zeromq/jeromq)这是一个普通的zeromq java端口。它甚至[更快](https://github.com/zeromq/jeromq/wiki/Perfomance)比在某些情况下的绑定 – drzymala