A small, fast Java client for the Jolt in-memory messaging broker.
- Plain TCP + NDJSON (newline-delimited JSON)
- No external dependencies (standard library only)
- Supports:
authsub/unsubpubping
- Designed for low latency and high throughput
- Java 8 or newer
- A running Jolt server (the Go broker):
- Example:
./broker -config=config.json - Default port:
8080(unless changed inconfig.json)
- Example:
jolt-java-api/
src/
main/
java/
io/
jolt/
api/
config/
JoltConfig.java
exception/
JoltException.java
response/
JoltErrorResponse.java
JoltResponseParser.java
message/
JoltMessageHandler.java
JoltTopicMessage.java
builder/
JoltRequestBuilder.java
JoltClient.java
pom.xml
README.md
Place all API classes under src/main/java/io/jolt/api.
If you are not using Maven/Gradle, just ensure the package io.jolt.api
matches the directory layout where you compile.
From the jolt-java-api root (where src lives):
javac -d out $(find src/main/java -name "*.java")On Windows (PowerShell):
javac -d out (Get-ChildItem -Recurse src\main\java\*.java).FullNameThis compiles all classes to the out directory.
To run a sample app (if you have e.g. io.jolt.example.JoltExampleApp):
java -cp out io.jolt.example.JoltExampleAppIf you use Maven, a minimal pom.xml could look like:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.jolt</groupId>
<artifactId>jolt-java-api</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>jolt-java-api</name>
<description>Java client for the Jolt messaging broker</description>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
</build>
</project>Build:
mvn packageThe JAR will be in target/jolt-java-api-0.1.0.jar.
Either:
- Add compiled classes (
out) to your application’s classpath, or - Add the built JAR (
jolt-java-api-0.1.0.jar) to your project’s dependencies.
Import in your Java code:
import io.jolt.api.*;JoltConfig config = JoltConfig.newBuilder()
.host("127.0.0.1") // Jolt server host
.port(8080) // Jolt server port
.build();
JoltMessageHandler handler = new JoltMessageHandler() {
@Override
public void onOk(String rawLine) {
System.out.println("[OK] " + rawLine);
}
@Override
public void onError(JoltErrorResponse error, String rawLine) {
System.err.println("[ERROR] " + error.getError());
}
@Override
public void onTopicMessage(JoltTopicMessage msg, String rawLine) {
System.out.println("[MSG] " + msg.getTopic() + " -> " + msg.getData());
}
@Override
public void onDisconnected(Throwable cause) {
System.err.println("[DISCONNECTED] " +
(cause != null ? cause.getMessage() : "closed"));
}
};
JoltClient client = new JoltClient(config, handler);
client.connect();If your config.json for the server has "security": { "enabled": true, ... },
you must authenticate:
client.auth("username", "password");If security is disabled on the server, this call still returns {"ok":true}
and you can also skip it completely.
Subscribe to a topic:
client.subscribe("chat.room1");Publish a message:
client.publish("chat.room1", "hello from jolt-java-api");When a message is delivered, your onTopicMessage handler receives it.
client.ping();You’ll receive an {"ok":true} response in onOk.
client.close();This closes the TCP connection and stops the reader thread.
import io.jolt.api.*;
public class JoltExampleApp {
public static void main(String[] args) throws Exception {
// 1. Configure connection
JoltConfig config = JoltConfig.newBuilder()
.host("127.0.0.1")
.port(8080)
.build();
// 2. Define how to handle messages
JoltMessageHandler handler = new JoltMessageHandler() {
@Override
public void onOk(String rawLine) {
System.out.println("[OK] " + rawLine);
}
@Override
public void onError(JoltErrorResponse error, String rawLine) {
System.err.println("[ERROR] " + error.getError());
}
@Override
public void onTopicMessage(JoltTopicMessage msg, String rawLine) {
System.out.println("[MSG] " + msg.getTopic() + " -> " + msg.getData());
}
@Override
public void onDisconnected(Throwable cause) {
System.err.println("[DISCONNECTED] " +
(cause != null ? cause.getMessage() : "closed"));
}
};
// 3. Create client and connect
JoltClient client = new JoltClient(config, handler);
client.connect();
// 4. Authenticate if your Jolt server requires it
// (adjust username/password to match server config.json)
client.auth("jolt-chat", "some password");
// 5. Subscribe and publish
client.subscribe("chat.room1");
client.publish("chat.room1", "hello from Java!");
// 6. Keep app running for a while to receive messages
Thread.sleep(10_000);
// 7. Clean shutdown
client.close();
}
}Compile and run (without Maven):
javac -cp out -d out src/main/java/io/jolt/example/JoltExampleApp.java
java -cp out io.jolt.example.JoltExampleApp(Adjust classpath and paths if your structure is different.)
- This API does not provide TLS. To secure transport:
- Run Jolt behind a TLS-terminating proxy (e.g. Nginx, HAProxy), or
- Use OS-level tunnels (SSH, VPN).
- All JSON is built manually with escaping for safety and performance.
- The client uses a single background thread for reading and a synchronized writer for sending, which keeps it simple and efficient.
For more advanced features (topic-specific handlers, reconnection, etc.), you can build thin wrappers on top of this core API.