Search in sources :

Example 6 with MergePoint

use of ru.fix.completable.reactor.runtime.dsl.MergePoint in project completable-reactor by ru-fix.

the class CompletableReactorTest method optional_processor_execution.

@Test
public void optional_processor_execution() throws Exception {
    class Config {

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<IdListPayload> idProcessor1 = buildProcessor(graphBuilder, new IdProcessor(1));

        Processor<IdListPayload> idProcessor2 = buildProcessor(graphBuilder, new IdProcessor(2));

        Processor<IdListPayload> idProcessor3 = buildProcessor(graphBuilder, new IdProcessor(3));

        MergePoint<OptionalProcessorExecutionPayload> mergePoint = graphBuilder.mergePoint().forPayload(OptionalProcessorExecutionPayload.class).withMerger("getWhereToGo", new String[] { "returns destination from payload" }, pld -> {
            return pld.getWhereToGo();
        }).buildMergePoint();

        ReactorGraph<OptionalProcessorExecutionPayload> graph() {
            return graphBuilder.payload(OptionalProcessorExecutionPayload.class).merge(mergePoint).mergePoint(mergePoint).on(OPTIONAL_DECISION.LEFT).handle(idProcessor2).on(OPTIONAL_DECISION.RIGHT).handle(idProcessor1).mergePoint(idProcessor1).onAny().handle(idProcessor2).mergePoint(idProcessor2).onAny().handle(idProcessor3).mergePoint(idProcessor3).onAny().complete().coordinates().start(0, 17).proc(idProcessor1, 246, 147).proc(idProcessor2, -17, 252).proc(idProcessor3, -15, 413).merge(idProcessor1, 287, 223).merge(idProcessor2, 21, 328).merge(idProcessor3, 23, 504).merge(mergePoint, 98, 79).complete(idProcessor3, 129, 537).buildGraph();
        }
    }
    val graph = new Config().graph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    CompletableReactor.Execution<OptionalProcessorExecutionPayload> result = reactor.submit(new OptionalProcessorExecutionPayload().setWhereToGo(OPTIONAL_DECISION.RIGHT));
    OptionalProcessorExecutionPayload resultPayload = result.getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(1, 2, 3), resultPayload.getIdSequence());
    result = reactor.submit(new OptionalProcessorExecutionPayload().setWhereToGo(OPTIONAL_DECISION.LEFT));
    resultPayload = result.getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(2, 3), resultPayload.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) Test(org.junit.Test)

Example 7 with MergePoint

use of ru.fix.completable.reactor.runtime.dsl.MergePoint in project completable-reactor by ru-fix.

the class CompletableReactorTest method dead_transition_breaks_flow.

@Test
public void dead_transition_breaks_flow() throws Exception {
    class Config {

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<DeadTransitionBreaksFlow> idProcessor1 = graphBuilder.processor().forPayload(DeadTransitionBreaksFlow.class).withHandler(new IdProcessor(1)::handle).withMerger((pld, id) -> {
            pld.getIdSequence().add(id);
            return pld.getFlowDecision();
        }).buildProcessor();

        Processor<IdListPayload> idProcessor2 = buildProcessor(graphBuilder, new IdProcessor(2));

        Processor<IdListPayload> idProcessor3 = buildProcessor(graphBuilder, new IdProcessor(3));

        Processor<IdListPayload> idProcessor4 = buildProcessor(graphBuilder, new IdProcessor(4));

        MergePoint<DeadTransitionBreaksFlow> decisionMergePoint = graphBuilder.mergePoint().forPayload(DeadTransitionBreaksFlow.class).withMerger(DeadTransitionBreaksFlow::getFlowDecision).buildMergePoint();

        ReactorGraph<DeadTransitionBreaksFlow> graph() {
            return graphBuilder.payload(DeadTransitionBreaksFlow.class).merge(decisionMergePoint).mergePoint(decisionMergePoint).on(DeadTransitionBreaksFlow.FlowDecision.THREE).handle(idProcessor1).on(DeadTransitionBreaksFlow.FlowDecision.THREE).handle(idProcessor2).on(DeadTransitionBreaksFlow.FlowDecision.THREE).handle(idProcessor3).on(DeadTransitionBreaksFlow.FlowDecision.TWO).handle(idProcessor1).on(DeadTransitionBreaksFlow.FlowDecision.TWO).handle(idProcessor3).mergePoint(idProcessor1).on(DeadTransitionBreaksFlow.FlowDecision.THREE).merge(idProcessor2).on(DeadTransitionBreaksFlow.FlowDecision.TWO).merge(idProcessor3).mergePoint(idProcessor2).onAny().merge(idProcessor3).mergePoint(idProcessor3).onAny().handle(idProcessor4).mergePoint(idProcessor4).onAny().complete().coordinates().start(500, 100).proc(idProcessor1, 399, 309).proc(idProcessor2, 551, 319).proc(idProcessor3, 725, 302).proc(idProcessor4, 713, 609).merge(idProcessor1, 422, 473).merge(idProcessor2, 584, 410).merge(idProcessor3, 704, 526).merge(idProcessor4, 754, 706).merge(decisionMergePoint, 551, 173).complete(idProcessor4, 765, 773).buildGraph();
        }
    }
    val graph = new Config().graph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    var result = reactor.submit(new DeadTransitionBreaksFlow().setFlowDecision(DeadTransitionBreaksFlow.FlowDecision.THREE)).getResultFuture().get(5, TimeUnit.MINUTES);
    assertEquals(Arrays.asList(1, 2, 3, 4), result.getIdSequence());
    result = reactor.submit(new DeadTransitionBreaksFlow().setFlowDecision(DeadTransitionBreaksFlow.FlowDecision.TWO)).getResultFuture().get(5, TimeUnit.MINUTES);
    assertEquals(Arrays.asList(1, 3, 4), result.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) lombok.experimental.var(lombok.experimental.var) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) Test(org.junit.Test)

Aggregations

lombok.val (lombok.val)7 Test (org.junit.Test)7 ReactorGraphBuilder (ru.fix.completable.reactor.runtime.ReactorGraphBuilder)7 MergePoint (ru.fix.completable.reactor.runtime.dsl.MergePoint)7 Processor (ru.fix.completable.reactor.runtime.dsl.Processor)6 CompletableReactor (ru.fix.completable.reactor.runtime.CompletableReactor)4 Semaphore (java.util.concurrent.Semaphore)2 TimeoutException (java.util.concurrent.TimeoutException)2 lombok.experimental.var (lombok.experimental.var)2 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 List (java.util.List)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 TimeUnit (java.util.concurrent.TimeUnit)1 Data (lombok.Data)1 EqualsAndHashCode (lombok.EqualsAndHashCode)1 Accessors (lombok.experimental.Accessors)1 Slf4j (lombok.extern.slf4j.Slf4j)1 Assert (org.junit.Assert)1 Before (org.junit.Before)1