我已经开始使用 Reactor,但我的第一个 Activity 遇到了麻烦:D
遵循example在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
最佳答案
不要忘记,Reactor
是 Reactive Streams
范例的实现,并且所有内容都是异步
。
因此,您的 reactor.notify(topic, Event.wrap(event));
是一个为某些 handler
发布到 EventRouter
的事件> 在单独的线程
内。
因此,您的main
主题应该等待,直到所有下游工作完成。
或者在 main
中添加 Thread.sleep(1000);
或使用 CoutDownLatch
等待来自该 Reactor 线程的事件( com.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();
关于java - react 堆,无法加载类 "org.slf4j.impl.StaticLoggerBinder",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25823162/