Solon v3.5.2

dami - bus 之调用事件(call)

</> markdown

这里把 (request / reponse)模式,或者(call / return)简称为:调用(call)。

1、发送(调用事件)与监听(调用事件)

public class DemoApp {
    static String topic = "demo.hello";

    public static void main(String[] args) {
        //监听调用事件
        Dami.bus().listen(topic, (event, data, sink) -> {
            System.err.println(data);
            sink.complete("hi!");
        });

        //发送调用事件
        String rst = Dami.bus().<String, String>call(topic, "hello").get();
        System.err.println(rst);
    }
}

2、调用事件的内部处理

调用事件的内部同样是“通用事件”(仅是一种体验简化)。改成“通用事件”如下:

public class DemoApp {
    static String topic = "demo.hello";

    public static void main(String[] args) {
        //监听调用事件
        Dami.bus().<CallPayload<String, String>>listen(topic, event -> {
            System.err.println(event.getPayload().getData());
            event.getPayload().getSink().complete("hi!");
        });

        //发送调用事件
        String rst = Dami.bus().<CallPayload<String, String>>send(topic, new CallPayload<>("hello"))
                               .getPayload()
                               .getSink() //:CompletableFuture<String>
                               .get();
        System.err.println(rst);
    }
}