1

Reactor を使い始めましたが、最初のイベントで問題が発生しています :D

github の例に従って、「hello world」を書き込もうとしましたが、成功しませんでした...

何が問題ですか?

コード:

package reactor;

import static reactor.event.selector.Selectors.$;
import reactor.core.Environment;
import reactor.core.Reactor;
import reactor.core.spec.Reactors;
import reactor.event.Event;
import reactor.function.Consumer;

public class Main {

    public static void main(String[] args) {

        final Environment env = new Environment();

        final Reactor reactor = Reactors.reactor(env);

        String topic = "event.message";

        reactor.on($(topic), new Consumer<Event<Message>>(){

            @Override
            public void accept(Event<Message> t) {
                System.out.println("Hello World");
            }

        });

        final Message event = new Message();
        reactor.notify(topic, Event.wrap(event));
        System.out.println("ends");
    }

    public static class Message{

    }
}

出力:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
ends
4

1 に答える 1

2

それがパラダイムReactorの実装であり、そこにあるすべてのものであることを忘れないでください。Reactive Streamsasync

したがって、 yourは、別の 内のfor someにreactor.notify(topic, Event.wrap(event));公開するイベントです。EventRouterhandlerThread

したがって、すべてのダウンストリーム作業が完了するまで、mainスレッドは待機する必要があります。

または、その Reactor のスレッドからのイベントを待機するためThread.sleep(1000);に and ofmainまたは useを追加します (デフォルトで):CoutDownLatchcom.lmax.disruptor.RingBuffer

final CountDownLatch stopLatch = new CountDownLatch(1);

reactor.on($(topic), new Consumer<Event<Message>>(){

    @Override
    public void accept(Event<Message> t) {
        System.out.println("Hello World");
        stopLatch.countDown();
    }

});
....
stopLatch.await();
于 2014-09-13T12:53:33.043 に答える