This project is an implementation of the (next to be) Eclipse MicroProfile Reactive Messaging specification - a CDI extension to build event-driven microservices and data streaming applications. It provides support for:
It also provides a way to inject streams into CDI beans, and so link your Reactive Messaging streams into CDI beans,or JAX-RS resources.
See PREREQUISITES.md for details.
The build process requires Apache Maven and Java 11+ and can be performed using:
mvn clean install
The best way to start is to look at the examples/quickstart
project. It's a Maven project listing the minimal set of
dependencies and containing a single class:
package io.smallrye.reactive.messaging.quickstart;
import org.eclipse.microprofile.reactive.messaging.Incoming;
import org.eclipse.microprofile.reactive.messaging.Outgoing;
import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder;
import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.se.SeContainerInitializer;
@ApplicationScoped
public class QuickStart {
public static void main(String[] args) {
SeContainerInitializer.newInstance().initialize();
}
@Outgoing("source")
public PublisherBuilder<String> source() {
return ReactiveStreams.of("hello", "with", "SmallRye", "reactive", "message");
}
@Incoming("source")
@Outgoing("processed-a")
public String toUpperCase(String payload) {
return payload.toUpperCase();
}
@Incoming("processed-a")
@Outgoing("processed-b")
public PublisherBuilder<String> filter(PublisherBuilder<String> input) {
return input.filter(item -> item.length() > 4);
}
@Incoming("processed-b")
public void sink(String word) {
System.out.println(">> " + word);
}
}
Run the project with: mvn compile exec:java -Dexec.mainClass=io.smallrye.reactive.messaging.quickstart.QuickStart
:
>> HELLO
>> SMALLRYE
>> REACTIVE
>> MESSAGE
Please read CONTRIBUTING.md for details, and the process for submitting pull requests.
The project is sponsored by Red Hat.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.