java message-queue zeromq

Entendiendo el enlace java zeromq



message-queue (3)

Estoy investigando zeromq como una solución de paso de mensajes en un proyecto java, pero las instrucciones sobre el enlace java me resultan un poco difíciles de seguir. http://www.zeromq.org/bindings:java

No estoy familiarizado con los enlaces de java, por lo que estas pueden ser preguntas estúpidas, pero alguien puede ayudarme a entender:

  1. ¿Por qué necesito instalar algo?
  2. ¿Los tarros que construyo en una máquina funcionarán en otro sistema? Necesito esta aplicación para ser portátil.
  3. Si es así, ¿por qué necesito construir mis propios tarros para empezar?

Siento que las instrucciones proporcionadas en zeromq requieren familiaridad básica con los proyectos de construcción C que me faltan, por lo que quizás solo estoy siendo denso, pero esto parece mucho trabajo.


Como compañero de usuario del enlace de Java de ZeroMQ, simpatizo. ZeroMQ es definitivamente una de las dependencias de Java más difíciles de administrar. En su corazón, ZeroMQ es un código C nativo y el enlace de Java es un envoltorio (relativamente) ligero alrededor de una interfaz JNI a la biblioteca ZeroMQ principal y es por eso que es complejo de implementar.

Aparte, si ZeroMQ es una buena opción para su aplicación, vale la pena porque realmente no hay nada como eso. Desafortunadamente, esto significa que debe seguir todos estos pasos para que funcione, de modo que pueda decidir si es lo que realmente necesita.

ZeroMQ para Java se basa en tres componentes:

  • libzmq: la biblioteca central de ZeroMQ (DLL: necesaria para cualquier idioma, no solo para Java)
  • jzmq: la parte nativa del enlace de Java (DLL)
  • zeromq.jar - la parte java del enlace de Java (JAR)

¿Los tarros que construyo en una máquina funcionarán en otro sistema? Necesito esta aplicación para ser portátil.

Sí. El tarro será portátil. Puedes construirlo en cualquier máquina y desplegarlo en cualquier otro. Sin embargo, esa es la parte fácil. La parte difícil es crear las diversas DLL que se requieren y las que no son portátiles. Digamos que quieres soportar Windows, Mac y Fedora Linux. Necesitará entornos de desarrollo nativos en Windows, Mac y Fedora y compilará las DLL para cada plataforma que desee admitir.

No sé lo suficiente sobre Linux para decir si una DLL construida en una distribución (por ejemplo, Fedora) se ejecutará en otra (por ejemplo, Debian). Si no, entonces tienes más trabajo por delante.

De todos modos, su aplicación será portátil: ZeroMQ y JZMQ pueden ejecutarse en una gran cantidad de plataformas, pero tendrá que tener un control estricto sobre su proceso de implementación para asegurarse de que al instalar cada plataforma, el contenedor y el conjunto adecuado de DLL sean instalado, y se instalan en el lugar correcto.

¿Por qué necesito instalar algo?

Técnicamente no lo haces. Pero creo que recomiendan realizar el paso de make install modo que los archivos de inclusión y biblioteca estén donde los compiladores los esperan y también para que Java pueda cargarlos cuando sea el momento de ejecutar su programa.

Si es así, ¿por qué necesito construir mis propios tarros para empezar?

No soy un comentarista, así que no puedo decirlo con seguridad. Supongo que parte de esto es la eficiencia del desarrollador: preferirían mejorar el código en lugar de crear archivos jar para los usuarios que podrían crear los archivos jar por sí mismos.

Y lo que es más importante, ya que los archivos jar no son suficientes y tiene que crear los DLL de todos modos, tiene más sentido construir los archivos jar y los archivos DLL juntos. De esa manera, está seguro de que el reiniciador JNI tiene exactamente los métodos nativos correctos implementados en C para coincidir con las declaraciones nativas en la clase envoltura Java.

Buena suerte. Espero que esto ayude.


Personalmente, creo que los JAR pre-hechos ayudarían mucho a 0MQ en java. Si bien trabajo en Java en muchos sitios, no proporcionan MSVS y tener que realizar una configuración tan larga solo para obtener una DLL y un jar parece contraproducente para mí.


También puede consultar JeroMQ (implementación Java pura de libzmq).

JeroMQ es una pila Java completa que utiliza el mismo protocolo y API de ZeroMQ y es un proyecto oficial de la comunidad. Hace la vida mucho más sencilla para los usuarios de Java, ya que no hay JNI ni C ++ para compilar. Hace todo lo que ZeroMQ hace, excepto PGM multicast.