我在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中看不到这样的内容)?