Skip to main content

flamme

A quarkus extension for building Java distributed applications, without distributed complexity. Inspired by google's service weaver.

Get Started →
Hello, World 🌎
import com.amadeus.flamme.runtime.annotations.Flamme;
import com.amadeus.flamme.runtime.annotations.FlammeImpl;
import com.google.protobuf.Message;
import com.google.protobuf.StringValue;
import jakarta.inject.Inject;
import java.util.Map;

@Flamme(
serviceName = "greeter",
multiPayloadKeys = {
@Flamme.MultiPayloadKey(id = GreeterService.NAME_KEY, type = StringValue.class),
@Flamme.MultiPayloadKey(id = GreeterService.GREETING_KEY, type = StringValue.class)
}
)
public interface GreeterService {
String NAME_KEY = "name";
String GREETING_KEY = "greeting";

Map<String, Message> sayHello(Map<String, Message> payload);
}

@FlammeImpl
class GreeterServiceImpl implements GreeterService {
@Override
public Map<String, Message> sayHello(Map<String, Message> payload) {
StringValue name = (StringValue) payload.get(NAME_KEY);
return Map.of(
GREETING_KEY,
StringValue.of("Hello, " + name.getValue() + "!")
);
}
}

class GreeterResource {
@Inject
GreeterService greeterService;

String greet() {
Map<String, Message> response = greeterService.sayHello(
Map.of(GreeterService.NAME_KEY, StringValue.of("World"))
);

return ((StringValue) response.get(GreeterService.GREETING_KEY)).getValue();
}
}
# Run as distributed
# First Node hosts only the resource.
java -jar -Dflamme.services.greeter.remote=true -Dquarkus.http.port=8080 ./quarkus-run.jar

# Second Node hosts the flamme component and doesn't listen on http.
java -jar -Dflamme.services.greeter.remote=false -Dquarkus.http.host-enabled=false ./quarkus-run.jar

# Or, run everything together
java -jar ./quarkus-run.jar
Flamme is made possible by:
sonofthecomet-ctrl avatarjolebob avatar