This is the official Java client library for HStreamDB.
Please use the latest released version.
The latest release is v0.17.0, which requires HStreamDB v0.17.0 .
The library artifact is published in Maven central, available at hstreamdb-java.
For Maven Users, the library can be included easily like this:
<dependencies>
<dependency>
<groupId>io.hstream</groupId>
<artifactId>hstreamdb-java</artifactId>
<version>0.17.0</version>
</dependency>
</dependencies>
For Gradle Users, the library can be included easily like this:
implementation 'io.hstream:hstreamdb-java:0.17.0'
Here we will show you some simple examples to use hstreamdb-client, you can find the complete examples in hstreamdb-java-examples, for more detail on introduction and usage, please check the guides.
import io.hstream.*;
public class ConnectExample {
public static void main(String[] args) throws Exception {
final String serviceUrl = "localhost:6570";
HStreamClient client = HStreamClient.builder().serviceUrl(serviceUrl).build();
System.out.println("Connected");
client.close();
}
}
// get a list of streams
for(Stream stream: client.listStreams()) {
System.out.println(stream.getStreamName());
}
// create a new stream
client.createStream("test_stream");
// create a new stream with 5 replicas
client.createStream("test_stream", 5);
// delete a stream
client.deleteStream("test_stream");
Producer producer = client.newProducer().stream("test_stream").build();
// write raw records
Random random = new Random();
byte[] rawRecord = new byte[100];
random.nextBytes(rawRecord);
Record recordR = Record.newBuilder().rawRecord(rawRecord).build();
CompletableFuture<String> future = producer.write(recordR);
// write hRecords
HRecord hRecord = HRecord.newBuilder()
.put("key1", 10)
.put("key2", "hello")
.put("key3", true)
.build();
Record recordH = Record.newBuilder().hRecord(hRecord).build();
CompletableFuture<String> future = producer.write(recordH);
// buffered writes
BatchSetting batchSetting =
BatchSetting.newBuilder()
.recordCountLimit(100)
.bytesLimit(4096)
.ageLimit(100)
.build();
FlowControlSetting flowControlSetting =
FlowControlSetting.newBuilder()
.bytesLimit(40960)
.build();
BufferedProducer batchedProducer =
client.newBufferedProducer().stream("test_stream")
.batchSetting(batchSetting)
.flowControlSetting(flowControlSetting)
.build();
for(int i = 0; i < 1000; ++i) {
random.nextBytes(rawRecord);
Record recordB = Record.newBuilder().rawRecord(rawRecord).build();
batchedProducer.write(recordB);
}
// flush and close batchedProducer
batchedProducer.close();
Please do not write both binary data and hrecord in one stream.
// first, create a subscription for the stream
Subscription subscription =
Subscription
.newBuilder()
.subscription("my_subscription")
.stream("my_stream")
.ackTimeoutSeconds(600)
.build();
client.createSubscription(subscription);
// second, create a consumer attach to the subscription
Consumer consumer =
client
.newConsumer()
.subscription("my_subscription")
.rawRecordReceiver(
((receivedRawRecord, responder) -> {
System.out.println(receivedRawRecord.getRecordId());
responder.ack();
}))
.build();
// third, start the consumer
consumer.startAsync().awaitRunning();
System.out.println("the consumer is started");
Reader reader =
client
.newReader()
.readerId("my_readerId")
.streamName("my_stream")
.shardId("my_shardId")
.build();
List<Record> records = reader.read(10).join();
reader.close();