如何使用Vertx和Redis继续收听消息?

时间:2018-03-24 23:43:12

标签: java redis vert.x

我有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与许多"听众"但当时只有一个人收到消息。我的意思是,一个到多个发布者到特定频道,一个到多个订阅者,但是当我们发布的消息只有一个订阅者收到消息

1 个答案:

答案 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