gpt4 book ai didi

java - springrabbitmq java应用程序正确关闭

转载 作者:行者123 更新时间:2023-12-02 04:04:58 26 4
gpt4 key购买 nike

我有一个基于 spring 和 spring-rabbit 库的独立 java 应用程序。我这样开始:

nohup java -jar myapp.jar &

但有时我必须重新启动应用程序才能升级它。现在我使用killall -9 java,但这不是最好的方法。如何正确停止它并确保在该时间段内发送给该应用程序的兔子监听器的所有请求都不会被部分处理,而只会被拒绝并发送给其他兔子消费者?

最佳答案

首先 - 不要使用 killall -9 - 它会向 JVM 发送一个 SIGKILL 信号,该信号无法被拦截,并且不允许有序关闭。相反,使用 killallkillall -15 (15 是默认信号)发送 SIGTERM ,该信号被拦截JVM 并允许有序关闭。

第二点 - 不要过早确认 RabbitMQ 消息 - 仅在消息实际被处理后才这样做。在您确认消息之前,RabbitMQ 会将其保持在“未确认”状态。如果消费者在没有确认的情况下死亡,消息将被放回到队列中以供另一个消费者接收。

根据您使用的框架,您可能需要注册 shutdown hook以干净的方式关闭您的应用程序。例如,如果您使用独立的 Spring,则应该调用 ConfigurableApplicationContext#registerShutdownHook在您创建的 ApplicationContext 上,以确保所有 bean(包括 RabbitMQ 使用者)都正确关闭。

关于java - springrabbitmq java应用程序正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34413094/

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