Backpressure-ready components to encode, decode, send (unicast, multicast or request/response) and serve connections :
- reactor-aeron : Efficient Unicast/Multicast reactive-streams transport for Aeron
- reactor-netty : Client/Server interactions for UDP/TCP/HTTP
- reactor-codec : Reactive-Streams decoders/encoders (Codec) including compression, serialization and such.
An implementation of Reactive Streams over Aeron supporting both unicast and multicast modes of data sending.
- Snapshot : 2.5.0.BUILD-SNAPSHOT ( Java 8+ required )
- Milestone : TBA ( Java 8+ required )
With Gradle from repo.spring.io or Maven Central repositories (stable releases only):
repositories {
maven { url 'http://repo.spring.io/snapshot' }
//maven { url 'http://repo.spring.io/milestone' }
mavenCentral()
}
dependencies {
compile "io.projectreactor:reactor-aeron:2.5.0.BUILD-SNAPSHOT"
}
A combination of AeronSubscriber playing a role of signals sender and AeronFlux playing a role of signals receiver allows transporting data from a sender to a receiver over Aeron in both unicast and multicast modes.
AeronSubscriber awaiting for connections from AeronFlux:
AeronSubscriber subscriber = AeronSubscriber.create(Context.create()
.senderChannel("udp://serverbox:12000"));
Flux.range(1, 10).map(i -> Buffer.wrap("" + i)).subscribe(subscriber); // sending 1, 2, ..., 10 via Aeron
AeronFlux connecting to AeronSubscruber above:
Flux<Buffer> receiver = AeronFlux.listenOn(Context.create()
.senderChannel("udp://serverbox:12000") // sender channel specified for AeronSubscriber
.receiverChannel("udp://clientbox:12001"));
receiver.subscribe(System.out::println); // output: 1, 2, ..., 10
A Reactive Streams Processor which plays roles of both signal sender and signal receiver locally and also allows remote instances of AeronFlux to connect to it via Aeron and receive signals.
A processor sending signals via Aeron:
AeronProcessor processor = AeronProcessor.create(Context.create()
.senderChannel("udp://serverbox:12000"));
Flux.range(1, 1000000).map(i -> Buffer.wrap("" + i)).subscribe(processor);
processor.subscribe(System.out::println);
A receiver connecting to the processor above and receiving signals:
Flux<Buffer> receiver = AeronFlux.listenOn(Context.create()
.senderChannel("udp://serverbox:12000")
.receiverChannel("udp://clientbox:12001"));
receiver.subscribe(System.out::println);
http://projectreactor.io/io/docs/reference/
http://projectreactor.io/io/docs/api/
Licensed under Apache Software License 2.0
Sponsored by Pivotal