Mutiny provides ways to create Multi
and Uni
instances where you control when you emit the different events.
It is handy when integrating asynchronous APIs using callbacks or listeners.
In this case, you can create Uni
s or Multi
s by using emitters:
Uni<String> uni = Uni.createFrom().emitter(emitter -> {
client.execute(ar -> {
if (ar.failed()) {
emitter.fail(ar.cause());
} else {
emitter.complete(ar.value());
}
});
});
Multi<String> multi = Multi.createFrom().emitter(emitter -> {
client.onMessage(e -> {
if (e != null) {
emitter.emit(e);
} else {
emitter.complete();
}
});
});
The consumer receives the emitter, which is used to emit items, completion, and failure events. The emission can happen from different threads.
The consumer is called for every subscription. |
When receiving the emitter, you can register a callback invoked on (downstream) cancellation, failure, and completion. Such a callback lets you clean up resources.
Uni<String> uni = Uni.createFrom().emitter(emitter -> {
emitter.onTermination(() -> {
// Called after failure, completion and cancellation
client.close();
});
client.execute(ar -> {
if (ar.failed()) {
emitter.fail(ar.cause());
} else {
emitter.complete(ar.value());
}
});
});