Ok after yesterday’s fun, I’m going to install jzmq now. Actually the instructions on that page is all you need with a couple of minor changes.

  • I run make install with sudo
  • java -Djava.library.path=/usr/local/lib -classpath /home/user/zeromq/libjzmq local_lat tcp://127.0.0.1:5555 1 100 is wrong and confusing.

The correct command needs the jar and library that was installed in the make install step. For me the library files was indeed installed to /usr/local/lib (again I’m on ubuntu) but you can verify by the output of make install. Also the output of make install will show you where zmq.jar was installed to. For me it was under /usr/local/share/java/. Finally, this uses local_lat which is actually in the ./perf directory of the jzmq source.

So actually the command should be:

java -Djava.library.path=/usr/local/lib -classpath /usr/local/share/java/zmq.jar:. local_lat tcp://127.0.0.1:5555 1 100

If you run from the perf directory where the class resides.
It doesn’t have any output as it’s just repeating whatever it received.
So when you start it up so just load up the client python script again and you should see:

python
>>> import client
>>> client.echo("hello")
Client sending hello
Client received hello

Obviously change the url in client.py or the command line used to match.

Enter Java & Gradle

This is kind of annoying for redistributable projects though. There has to be a better way. Well clone or update my zmq_stuff repo again. In jzmq-sample you will see a gradle project that uses a maven repo library for jzmq and pulls the native libs for my current ubuntu platform as well.

This won’t always work for you because you need to have the native libraries for the platform you intend to run on. So, worst case, you still have to build and bundle the above as a maven library to use it this way.

And you still have to make sure that zmq is installed on whatever machine that you run on.

Either way just run gradle run in the jzmq-sample project and it will start up a subscribe on epgm (multicast). I don’t know how to get the gradle application plugin to accept command line arguments (except a rather hacky groovy properties way) so you will just have to look at and edit the source to try other socket types and other protocols. But it should be simple enough to understand. :)