Skip to content

sdeleuze/reactor-io

 
 

Repository files navigation

reactor-io

Join the chat at https://gitter.im/reactor/reactor

Build Status

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.

reactor-aeron

An implementation of Reactive Streams over Aeron supporting both unicast and multicast modes of data sending.

Getting it

  • 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"
    }

AeronSubscriber + AeronFlux

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

AeronProcessor

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);

Reference

http://projectreactor.io/io/docs/reference/

Javadoc

http://projectreactor.io/io/docs/api/

Licensed under Apache Software License 2.0

Sponsored by Pivotal

About

Crossing IO boundaries on the JVM with Reactive Streams

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 94.4%
  • Groovy 5.6%