Pure Java implementation of libzmq (http://zeromq.org).
-
Based on libzmq 4.1.7.
-
ZMTP/3.0 (http://rfc.zeromq.org/spec:23).
-
tcp:// protocol and inproc:// is compatible with zeromq.
-
ipc:// protocol works only between jeromq (uses tcp://127.0.0.1:port internally).
-
Securities
-
Performance that's not too bad, compared to native libzmq.
- 4.5M messages (100B) per sec.
- Performance.
-
Exactly same developer experience with zeromq and jzmq.
-
ipc:// protocol with zeromq. Java doesn't support UNIX domain socket.
-
pgm:// protocol. Cannot find a pgm Java implementation.
-
norm:// protocol. Cannot find a Java implementation.
-
tipc:// protocol. Cannot find a Java implementation.
-
GSSAPI mechanism is not yet implemented.
-
TCP KeepAlive Count, Idle, Interval cannot be set via Java but as OS level.
-
Interrupting threads is still unsupported: library is NOT Thread.interrupt safe.
Contributions welcome! See CONTRIBUTING.md for details about the contribution process and useful development tasks.
Add it to your Maven project's pom.xml
:
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jeromq</artifactId>
<version>0.5.1</version>
</dependency>
<!-- for the latest SNAPSHOT -->
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jeromq</artifactId>
<version>0.5.2-SNAPSHOT</version>
</dependency>
<!-- If you can't find the latest snapshot -->
<repositories>
<repository>
<id>sonatype-nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
To generate an ant build file from pom.xml
, issue the following command:
mvn ant:ant
Here is how you might implement a server that prints the messages it receives and responds to them with "Hello, world!":
import org.zeromq.ZMQ;
import org.zeromq.ZContext;
public class hwserver
{
public static void main(String[] args) throws Exception
{
try (ZContext context = new ZContext()) {
// Socket to talk to clients
ZMQ.Socket socket = context.createSocket(ZMQ.REP);
socket.bind("tcp://*:5555");
while (!Thread.currentThread().isInterrupted()) {
// Block until a message is received
byte[] reply = socket.recv(0);
// Print the message
System.out.println(
"Received: [" + new String(reply, ZMQ.CHARSET) + "]"
);
// Send a response
String response = "Hello, world!";
socket.send(response.getBytes(ZMQ.CHARSET), 0);
}
}
}
}
The JeroMQ translations of the zguide examples are a good reference for recommended usage.
(Note that the Java examples in the zguide itself are out of date and do not necessarily reflect current recommended practices with JeroMQ.)
For API-level documentation, see the Javadocs.
This repo also has a doc folder, which contains assorted "how to do X" guides and other useful information about various topics related to using JeroMQ.
All source files are copyright © 2007-2020 contributors as noted in the AUTHORS file.
Free use of this software is granted under the terms of the Mozilla Public License 2.0. For details see the file LICENSE
included with the JeroMQ distribution.