Java-Vertx-发布-订阅模式:在其自己的使用者中发布消息。这是个坏主意吗?

问题描述 投票:0回答:1

我是发布-订阅模式的新手,我们在应用程序中使用Vertx。

我正在尝试在某些用例中执行此操作,在该用例中,我在自己的使用者中进行发布:

private void functionality() {
    EventBus eb = Vertx.currentContext().owner().eventBus();
    MessageConsumer<String> consumer = eb.consumer("myAddress");
    consumer.handler(message -> {
        if (condition1) {
            doOperationWhichMightChangeTheCondition();
            eb.publish("myAddress","Start Operation");
        }else {
            log.info("Operations on all assets completed");
        }
    });
    eb.publish("myAddress","Start Operation");
}

这是个坏主意。还会导致诸如递归调用的StackOverFlow错误吗?或其他任何问题?

java asynchronous functional-programming publish-subscribe vert.x
1个回答
0
投票

EventBus.publish方法是异步的;它不会阻止等待使用者接收/处理已发布的消息。因此,在使用者内调用publish,然后再消费已发布的消息是绝对安全的。在内部,Vert.x让Netty安排了对使用者的另一个调用,该调用直到当前调用(以及Netty事件循环之前安排的其他任何方法)都不会运行。您可以通过编写一个与消费者一起发布到其消费地址的测试,轻松地向自己证明这一点。您不会看到StackOverFlowError

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.