gpt4 book ai didi

java - 异步@RabbitListener中的同步代码?

转载 作者:行者123 更新时间:2023-12-02 10:21:45 24 4
gpt4 key购买 nike

从 RabbitMQ 文档中,使用 @RabbitListener 端点异步接收消息:

“异步接收消息的最简单方法是使用带注释的监听器端点基础结构。简而言之,它允许您将托管 Bean 的方法公开为 Rabbit 监听器端点。”

@RabbitListener(queues = "myQueue")
public void processOrder(String data) {
...
}

异步接收在这里到底意味着什么?使用阻塞调用有什么效果,例如考虑到异步接收的定义,上面processOrder(...)函数内部的同步HTTP?

最佳答案

异步意味着您不直接调用该方法,而是某些后台服务会在不受您控制的某个时刻调用它。将在哪个线程上调用此方法取决于该服务的配置。通常此类服务使用线程池。

在异步方法中使用阻塞调用的结果是该方法运行的线程被阻塞,并且无法为其他异步调用提供服务。如果异步服务背后的线程池的线程数量有限,则可能会发生所谓的“线程饥饿”,并且无法处理新的异步调用。否则,如果线程池不受限制,则它可能会消耗所有可用内存,因为每个线程的调用堆栈需要 0.5-1 MB。为了避免这种负面后果,异步服务的构建必须具有足够高的吞吐量以承受预期的负载,并且在负载过重的情况下,应采取预防措施以使服务优雅降级,而不是因 OOM 而导致整个 JVM 崩溃。

关于java - 异步@RabbitListener中的同步代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com