是否可以在EventBus上发送本地消息?

时间:2015-07-28 11:03:46

标签: java rx-java vert.x

我在API中找到的唯一内容是localConsumer所以我的想法是两次注册消费者 - 一次使用consumer,一次使用localConsumer,地址前缀为< EM>当地:

以下是一个例子:

public class VertxLocal {

    public static void main(String[] args) {
        final UUID id = UUID.randomUUID();

        Config config = new Config();
        config.getNetworkConfig().setPortAutoIncrement(true);
        HazelcastClusterManager cm = new HazelcastClusterManager(config);

        // This is io.vertx.rxjava.core.Vertx
        Vertx.clusteredVertxObservable(new VertxOptions().setClusterManager(cm))
            .subscribe(vertx -> {
                EventBus bus = vertx.eventBus();

                // Register the "public" consumer
                bus.consumer("test")
                    .toObservable()
                    .subscribe(message -> {
                        message.reply(id.toString());
                    });
                // Register the local consumer
                bus.localConsumer("local:test")
                    .toObservable()
                    .subscribe(message -> {
                        message.reply(id.toString());
                    });

                // Periodically retrieve replies from the local consumer
                vertx.setPeriodic(1, i -> {
                    bus.sendObservable("local:test", id.toString())
                        .subscribe(reply -> {
                            UUID fromId = UUID.fromString((String)reply.body());
                            if(fromId.equals(id)) {
                                System.out.println("Received message from local handler");
                            } else {
                                System.out.println("Received message from remote handler");
                            }
                        });
                });
            });
    }
}

这很有效,但是每次注册每个消费者都相当丑陋 - 我宁愿在发送消息时选择是否应该是本地消息。

有没有办法在没有注册本地消费者的情况下这样做 - 比如localSend(虽然我在API中看不到这样的内容)?

0 个答案:

没有答案