๐ A tiny but agile microservice framework built in Java 24 with first-class support for Docker ๐ณ, Kubernetes โธ๏ธ, and Kafka ๐จ event streaming.
Built for speed, scale, and simplicity.
โ
 Java 24-powered lightweight core
โ
 ๐ Kafka-based event-driven architecture
โ
 ๐ณ Docker-ready containers
โ
 โธ๏ธ Kubernetes-deployable out of the box
โ
 ๐ Minimal boilerplate, maximum flexibility
โ
 ๐ง DIY microservice stack for builders and hackers
โ
 ๐ 100% open source
Create a Fluid.java class:
public class Fluid {
    public static void main(String[] args) throws InterruptedException {
        try {
            for (int i = 0; i < 1000; i++) {
                String key = "key-" + i;
                String message = "Message " + i;
                KafkaMessenger.sendMessage("test-topic1", message);
            }
        } finally {
            System.out.println("Shutting down Kafka producer...");
            KafkaMessenger.shutdown();
        }
        Thread.sleep(50000); // Keep the app alive for a bit
    }
}public class MessageService {
    @KafkaListener(topic = "test-topic1", groupId = "test-group")
    public void handleMessage1(String message) {
        System.out.println("1-๐ Received at " + System.currentTimeMillis());
        System.out.println("1-๐ฅ Message: " + message);
    }
    @KafkaListener(topic = "test-topic2", groupId = "test-group")
    public void handleMessage2(String message) {
        System.out.println("2-๐ Received at " + System.currentTimeMillis());
        System.out.println("2-๐ฅ Message: " + message);
    }
}public class MessageService {
    @KafkaListener(topic = "test-topic1", groupId = "test-group")
    public void handleMessage1(String message) {
        System.out.println("1-๐ Received at " + System.currentTimeMillis());
        System.out.println("1-๐ฅ Message: " + message);
    }
    @KafkaListener(topic = "test-topic2", groupId = "test-group")
    @SendTo(topic = "processed-topic2")
    public String handleMessage2(String message) {
        System.out.println("2-๐ Received at " + System.currentTimeMillis());
        System.out.println("2-๐ฅ Message: " + message);
        // Forward processed message to another topic
        return "Processed: " + message;
    }
    @KafkaListener(topic = "test-topic3", groupId = "test-group")
    @ShortCircuit(topic = "error-topic3")
    public void handleMessageWithError(String message) {
        if (message.contains("fail")) {
            throw new RuntimeException("Error detected in message!");
        }
        System.out.println("3-๐ Message: " + message);
    }
}
[Fluid App] ---> [KafkaMessenger] ---> [Kafka Broker] ---> [KafkaProcessor] ---> [Your Listener]
- ๐ Sends and receives messages through Kafka
- ๐งฉ Plug-n-play message handlers via @KafkaListener
- ๐งต Simple threading and lifecycle controls
- ๐งต Async/parallel message handling
- ๐ Metrics (Prometheus or Micrometer)
- ๐ Graceful shutdown hooks
-  ๐พ Configuration via fluid.yaml
- ๐ง Built-in retry and backoff strategy
PRs are welcome! Open an issue or suggest an improvement โ letโs make microservices fun and fast again ๐งช
MIT License ยฉ 2025 Maifee Ul Asad