gpt4 book ai didi

docker - 重置 RabbitMQ 节点以进行集成测试

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

我在项目中使用 RabbitMQ 并针对它运行我的集成测试。由于测试需要彼此独立,我想在每次测试之前重置 RabbitMQ 实例,目前通过重新启动(自动创建的)RabbitMQ docker 容器来解决这个问题。但是,这非常慢(对于集成测试)。

我从this answer知道可以使用 rabbitmqctl stop && rabbitmqctl reset && rabbitmqctl start 重置 rabbitmq-instance - 但在 docker-image 的情况下,停止信号会终止主容器进程(即 rabbitmq-server ),这反过来会导致 dockerd 杀死整个容器。

到目前为止,我找到的唯一解决方案是运行 management-api-plugin,遍历所有队列、交换器、策略等并通过它删除它们——这反过来也需要一段时间,并且需要 management-plugin运行。

是否可以通过 AMQP、其他一些 API 端点或运行命令以编程方式重置正在运行的 rabbitmq 节点,而无需先停止它?

最佳答案

您所指的答案是正确的,因为您应该使用 stop_app,而不是像您的消息中那样使用 stop

两者之间有一个重要的区别:

  • stop :

    ...stops RabbitMQ and its runtime (Erlang VM)

  • stop_app :

    ...stops the RabbitMQ application, leaving the runtime (Erlang VM) running

因为在包含Erlang VM的rabbitmq容器进程中是PID = 1,停止它显然会导致容器停止。幸运的是,rabbitmq 作者added stop_app 命令专门针对 improve与测试相关的用户体验。

您所指的答案中的代码应该可以正常工作。这是与单行代码相同的代码:

docker exec my_queue sh -c "rabbitmqctl stop_app; rabbitmqctl reset; rabbitmqctl start_app"

输出将如下所示:

$ docker exec my_queue sh -c "rabbitmqctl stop_app; rabbitmqctl reset; rabbitmqctl start_app"
Stopping rabbit application on node rabbit@40420e95dcee
Resetting node rabbit@40420e95dcee
Starting node rabbit@40420e95dcee
$

关于docker - 重置 RabbitMQ 节点以进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56937107/

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