blob: 24bddb6064b6bdad6a0bcc927c5ad5e22a5fcf73 [file] [log] [blame] [view]
# Java SDK for Apache Iggy
Official Java client SDK for [Apache Iggy](https://iggy.apache.org) message streaming.
> This is part of the Apache Iggy monorepo. For the main project, see the [root repository](https://github.com/apache/iggy).
## Installation
Add the dependency to your project:
**Gradle:**
```gradle
implementation 'org.apache.iggy:iggy:0.6.0'
```
**Maven:**
```xml
<dependency>
<groupId>org.apache.iggy</groupId>
<artifactId>iggy</artifactId>
<version>0.6.0</version>
</dependency>
```
Find the latest version on [Maven Repository](https://mvnrepository.com/artifact/org.apache.iggy/iggy).
### Snapshot Versions
Snapshot versions are also available through the ASF snapshot repository:
**Gradle:**
```gradle
repositories {
maven {
url = uri("https://repository.apache.org/content/repositories/snapshots/")
}
}
dependencies {
implementation 'org.apache.iggy:iggy:0.6.1-SNAPSHOT'
}
```
**Maven:**
```xml
<repositories>
<repository>
<id>apache-snapshots</id>
<url>https://repository.apache.org/content/repositories/snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependency>
<groupId>org.apache.iggy</groupId>
<artifactId>iggy</artifactId>
<version>0.6.1-SNAPSHOT</version>
</dependency>
```
## Quick Start
### TCP Client (Blocking)
```java
import org.apache.iggy.Iggy;
// Create and connect with auto-login
var client = Iggy.tcpClientBuilder()
.blocking()
.host("localhost")
.port(8090)
.credentials("iggy", "iggy")
.buildAndLogin();
// Or build, connect, and login separately
var client = Iggy.tcpClientBuilder()
.blocking()
.host("localhost")
.port(8090)
.build();
client.connect();
client.users().login("iggy", "iggy");
```
### TCP Client (Async)
```java
import org.apache.iggy.Iggy;
// Create async client
var asyncClient = Iggy.tcpClientBuilder()
.async()
.host("localhost")
.port(8090)
.credentials("iggy", "iggy")
.buildAndLogin()
.join();
// Or with manual connect and login
var asyncClient = Iggy.tcpClientBuilder()
.async()
.host("localhost")
.build();
asyncClient.connect().join();
asyncClient.users().login("iggy", "iggy").join();
```
### HTTP Client
```java
import org.apache.iggy.Iggy;
// Using URL
var httpClient = Iggy.httpClientBuilder()
.blocking()
.url("http://localhost:3000")
.credentials("iggy", "iggy")
.buildAndLogin();
// Using host/port
var httpClient = Iggy.httpClientBuilder()
.blocking()
.host("localhost")
.port(3000)
.credentials("iggy", "iggy")
.buildAndLogin();
```
### TLS Support
Both TCP and HTTP clients support TLS:
```java
// TCP with TLS
var secureClient = Iggy.tcpClientBuilder()
.blocking()
.host("iggy-server.example.com")
.port(8090)
.enableTls()
.tlsCertificate("/path/to/ca.pem") // Optional custom CA
.credentials("admin", "secret")
.buildAndLogin();
// HTTPS
var secureHttpClient = Iggy.httpClientBuilder()
.blocking()
.host("iggy-server.example.com")
.port(443)
.enableTls()
.credentials("admin", "secret")
.buildAndLogin();
```
### Builder Options
The client builders support additional configuration:
```java
var client = Iggy.tcpClientBuilder()
.blocking()
.host("localhost")
.port(8090)
.connectionTimeout(Duration.ofSeconds(10))
.requestTimeout(Duration.ofSeconds(30))
.connectionPoolSize(10)
.retryPolicy(RetryPolicy.exponentialBackoff())
.credentials("iggy", "iggy")
.buildAndLogin();
```
### Version Information
```java
// Get SDK version
String version = Iggy.version(); // e.g., "0.6.1-SNAPSHOT"
// Get detailed version info
IggyVersion info = Iggy.versionInfo();
info.getVersion(); // Version string
info.getBuildTime(); // Build timestamp
info.getGitCommit(); // Git commit hash
info.getUserAgent(); // User-Agent string for HTTP
```
## Exception Handling
All exceptions thrown by the SDK inherit from `IggyException`. This allows you to catch all SDK-related errors with a single catch block, or handle specific exception types for more granular error handling.
## Examples
See the [`examples`](examples/) module for basic consumer and producer implementations using the SDK.
For Apache Flink integration, see the [Flink Connector Library](external-processors/iggy-connector-flink/iggy-connector-library/README.md).
## Building from Source
This project uses the Gradle Wrapper. Due to Apache Software Foundation policy, the `gradle-wrapper.jar` binary is not checked into the repository. Instead, the `gradlew` script automatically downloads it on first run.
```bash
# Build the project
./gradlew build
# Run tests
./gradlew test
```
The wrapper script will:
1. Download `gradle-wrapper.jar` from the official Gradle repository if missing
2. Verify the SHA256 checksum for security
3. Execute the requested Gradle command
No manual Gradle installation is required.
**Note:** Only the Unix shell wrapper (`gradlew`) is provided. Windows users should use WSL, Git Bash, or install Gradle manually.
## Contributing
Before opening a pull request:
1. **Format code:** `./gradlew spotlessApply`
2. **Validate build:** `./gradlew check`
This ensures code style compliance and that all tests and checkstyle validations pass.