Instalacion de zeroMQ y driver Java en Windows

De ChuWiki

ZeroMQ es una librería de sockets que va un poco más allá. Los sockets que ofrece esta librería implementan o facilitan el uso de los patrones habituales que se usan con los sockets, como Peticion-Respuesta, Publicación-Suscripción, Proxy, Router-Dialer, Push-Pull, etc.

La librería está hecha en C y puede instalarse o compilarse en cualquier sistema operativo. Hay también "puentes" para poder usar esta librería casi con cualquier lenguaje de programación, entre ellos Java o Python.

Vamos a ver aquí como instalar ZeroMQ en Windows y cómo prepararlo para poder usarlo desde Java.


Qué necesitamos[editar]

Necesitamos dos cosas

  1. Instalar la librería libzmq.dll que es la librería ZeroMQ en sí misma en algún sitio de nuestro Path de ejeuctables.
  2. Instalar la librería jzmq.dll y el jar zmq.jar. Estos ficheros son el puente entre ZeroMQ y nuestro programa Java, así que necesitaremos incluirlos en nuestro proyecto java.

Para incluir las librerías dll hay dos opciones.

  • Añadir los directorios donde estén las dll en el PATH de ejecutables
  • Usar la opción -Djava.library.path="directorio1;directorio2;..." para indicar los directorios donde están estas dll.

Instalación de ZeroMQ[editar]

La instalación de ZeroMQ es sencilla, podemos descargar un instalable de windows y simplemente tenemos que ejecutarlo.

Con esto tenemos ZeroMQ instalado. La dll que nos interesa está en el directorio bin de la instalación, aunque no se llama exactamente como esperamos, tienen nombres similares a libzmq-v100-mt-3_2_3, pero no debe preocuparnos, java sabrá elegir la adecuada.

Vamos ahora a ver qué hay que hacer para poder usarlo desde Java.

Instalación del Conector Java[editar]

Como hemos comentado, necesitamos tener dos cosas : una librería jzmq.dll y un jar zmq.jar, que tendremos que poner en nuestro proyecto. Para conseguirlos, debemos bajarnos los fuentes y compilarlos. Para compilarlo en windows hay varias opciones. Vamos a ver aquí sólo Visual Studio C++ 2010.


Visual Studio C++[editar]

Si no tenemos instalado Visual Studio C++, podemos descargarnos una versión gratuita de Visual Studio 2010 express que podremos usar sin más que registrarnos on-line para conseguir el número de licencia.

Con Visual Studio C++ abrimos el fichero builds/msvc/msvc.sln del directorio donde hayamos desempaquetado los fuentes. Puesto que el proyecto está pensado para Visual Studio C++ 2008, nos indicará que hay que hacer una conversión, así que le dejamos hacerlo.

Para que el proyecto compile correctamente, es necesario tocar una serie de cosas. Básicamente, indicarle dónde hay varios ficheros .h propios de java y de zeroMQ, indicarle dónde está libzmq.lib y finalmente, corregir algo que parece ser un pequeño error y que impide que compile


Añadir los ficheros .h[editar]

Sobre el proyecto jzmq de Visual Studio, pulsamos el botón derecho del ratón para sacar el menú de opciones y elegimos propiedades -> Propiedades de Configuración -> Directorios de VC++ -> Directorios de archivos de inclusión. Editamos para añadir tres directorios más:

  • Directorio include de donde hayamos instalado ZeroMQ.
  • Directorio include de nuestra intalación de Java.
  • Directorio include/win32 de nuestra instalación de Java.

Quedaría como en la siguiente imagen


Añadir las librerías[editar]

Debemos ahora añadir el directorio donde está la librería libzmq.lib. El proceso es el mismo pero eligiendo Directorio Archivos de biblioteca en la última ventana abierta. Debemos incuir el directorio

  • Directorio lib de donde hayamos instalado ZeroMQ


Indicar qué librería queremos de zeroMQ[editar]

Por defecto, el proyecto busca la librería libzmq.lib del directorio lib de donde tengamos instalado zeroMQ. Si vamos a ese directorio, veremos que no existe esa librería. En su lugar, hay librerías parecidas con nombres como

16/05/2013  02:17            11.102 libzmq-v100-mt-3_2_3.lib
16/05/2013  02:21            10.440 libzmq-v110-mt-3_2_3.lib
16/05/2013  02:19            10.600 libzmq-v110_xp-mt-3_2_3.lib
16/05/2013  02:17            10.702 libzmq-v90-mt-3_2_3.lib

Así que las opciones son dos. Una es elegir una de esas librerías y cambiarle el nombre por libzmq.lib. La otra, quizás más elegante, es decirle a Visual Studio C++ el nombre real de la librería que queremos.

Nuevamente abrimos las propiedades del proyecto jzmq y elegimos Propiedades de configuración -> vinculador -> entrada -> dependencias adicionales. Editamos el valor de esta propiedad y cambiamos el nombre libzmq.lib por el valor que queramos, por ejemplo libzmq-v100-mt-3_2_3.lib

Compilar[editar]

Todo preparado. Ahora en el árbol de proyectos sobre Solucion msvc (5 proyectos) sacamos el menú con el botón derecho del ratón y elegimos Generar solución. Si todo va como debe, tendremos los resultados en el directorio lib de donde hayamos desempaquetado estos funetes

  • zmq.dll
  • jzmq.jar

Usarlo desde java[editar]

En nuestro proyecto java, debemos incluir como dependencia el fichero jzmq.jar. En Añadir un jar a nuestro proyecto tienes un ejemplo de cómo hacerlo con eclipse

Además, cuando ejecutemos nuestro programa java, si no hemos metido los directorios con las dll en el PATH de windows, debemos definir la propiedad java.library.path con los directorios donde están las dll de zeroMQ y la que acabmamos de compilar, es decir, los directorios bin de zeroMQ y lib del proyecto que acabamos de compilar. La línea java de ejecución podría ser parecida a esta

java -Djava.library.path="D:\librerias\jzmq-master\lib;C:\Program Files\ZeroMQ 3.2.3\bin" .....