首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - Vertx -Publish-Subscribe模式:在自己的消费者内部发布消息。这是个坏主意吗?

Java - Vertx -Publish-Subscribe模式:在自己的消费者内部发布消息。这是个坏主意吗?
EN

Stack Overflow用户
提问于 2020-06-08 02:52:20
回答 1查看 275关注 0票数 1

我对发布-订阅模式很陌生,我们在应用程序中使用了Vertx。

我尝试这样做是为了一些用例,我在它自己的消费者内部发布:

代码语言:javascript
复制
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错误,如递归调用,或任何其他问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-08 04:30:42

EventBus.publish方法是异步的;它不会阻塞以等待使用者接收/处理发布的消息。因此,在消费者内部调用publish是完全安全的,该消费者随后将消费已发布的消息。在内部,Vert.x让Netty调度另一个对消费者的调用,直到当前调用(以及Netty事件循环中在它之前调度的任何其他方法)完成后才会运行。您可以很容易地向自己证明这一点,方法是编写一个测试,将一个消费者发布到它正在消费的地址。您将不会看到StackOverFlowError

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62250141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档