我有Listener
这样:
public class Listener extends AbstractVerticle {
public static void main(String[] args) {
Launcher.executeCommand("run", Listener.class.getName());
}
@Override
public void start() {
RedisOptions config = new RedisOptions()
.setHost("127.0.0.1");
RedisClient redis = RedisClient.create(vertx, config);
redis.blpop("myKey", 3500, System.out::println);
}
}
收到消息后,它会在控制台上成功打印,但不再接收其他消息。如果我在blpop
内运行while(true)
,我会因阻塞该线程而获得异常。
如何使用Vertx和Redis永久收听消息?
我真正需要归档的是某种Round Robin与许多"听众"但当时只有一个人收到消息。我的意思是,一个到多个发布者到特定频道,一个到多个订阅者,但是当我们发布的消息只有一个订阅者收到消息
答案 0 :(得分:1)
这可以分为两个问题:
1)如何在VertX中连续收听
2)我们如何实现仅向一个Verticle发送消息
从第一个问题开始,您可以使用setInterval:
vertx.setPeriodic(1000, t -> {
redis.blpop("myKey", 3500, h -> {
System.out.println(h.result()); // Need to check for success()
}
}));
这不会阻止EventLoop
从第二个问题开始,使用vertx.eventBus()。send()以Round-Robin方式向其中一个消费者发送消息: http://vertx.io/docs/vertx-core/java/#_the_event_bus_api