Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Vertx和Redis持续监听消息?_Java_Redis_Vert.x - Fatal编程技术网

Java 如何使用Vertx和Redis持续监听消息?

Java 如何使用Vertx和Redis持续监听消息?,java,redis,vert.x,Java,Redis,Vert.x,我有一个这样的听众: public class Listener extends AbstractVerticle { public static void main(String[] args) { Launcher.executeCommand("run", Listener.class.getName()); } @Override public void start() { RedisOptions config = ne

我有一个这样的听众:

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);

    }

}
当接收到一条消息时,它会成功地打印在控制台上,但不能再接收其他消息。如果我在whiletrue中运行blpop,我会得到一个阻塞线程的异常

如何使用Vertx和Redis永久侦听消息


我真正需要存档的是一种循环,有很多听众,但当时只有一个人得到信息。我的意思是,一对多的发布者对一个特定的频道,一对多的订阅者,但是当我们发布一条消息时,只有一个订阅者得到消息。

这可以分为两个问题: 1如何在VertX中持续收听 2我们如何实现只向一个垂直站点发送消息

对于第一个问题,您可以使用setInterval:

vertx.setPeriodic(1000, t -> {
   redis.blpop("myKey", 3500, h -> { 
         System.out.println(h.result()); // Need to check for success() 
   }
}));
这不会阻止EventLoop

关于第二个问题,请使用vertx.eventBus.send以循环方式向其中一个消费者发送消息:

vertx.setInterval在我的版本中不存在,但vertx.setInterval做到了这一点。请更新你的答案,我已经接受了。谢谢你的帮助。