0

我有两个垂直如下

第一个verticle只是监听一个地址测试并回复消息

public class FirstVerticle extends AbstractVerticle {

@Override
public void start()  {
Logger logger = LogManager.getLogger(FirstVerticle.class);
 vertx.eventBus().consumer("test",message->{
            logger.info("message received " + message.headers());
            message.reply("hi!!!!");
        });
}
}

第二个verticle只是发送一个消息到地址test

public class SecondVerticle extends AbstractVerticle {

    @Override
        public void start() throws Exception {
            Logger logger = LogManager.getLogger(SecondVerticle.class);
           
            vertx.eventBus().request("test","hey there",handler->{
                if(handler.failed())
                    logger.error("Failed to get data"+handler.cause());
                else
                    logger.info("response " + handler.result().headers());
            });
    
    
        }
    }

两个 vertciles 使用一个通用的主类进行部署

Vertx.clusteredVertx(new VertxOptions().setHAEnabled(true), vertx ->
                vertx.result().deployVerticle(verticleName, new DeploymentOptions().setHa(true))
        );

当作为一个单独的程序运行并将verticles部署在不同的JVM中时,verticles可以使用事件总线相互通信,但是当一次使用公共类部署两个verticles时不起作用,出现以下错误

 Failed to get data(TIMEOUT,-1) Timed out after waiting 30000(ms) for a reply. address:
 __vertx.reply.9da86cc6-f689-47d5-a5b4-bceafbce254a, repliedAddress: test

非常感谢任何帮助。提前致谢。

4

1 回答 1

0

Vertx 事件总线可以在 JVM 内进行通信。

我配置了事件总线拦截器是我的错误,但没有通过调用 context.next() 完成链。

于 2020-12-11T06:06:53.597 回答