重置 RabbitMQ 节点以进行集成测试
Reset RabbitMQ-node for integration testing
我在一个项目中使用 RabbitMQ,并且运行正在针对它进行集成测试。由于测试需要彼此独立,我想在每次测试之前重置 RabbitMQ 实例,目前通过重新启动(自动创建的)RabbitMQ docker 容器来解决这个问题。但是,这非常慢(对于集成测试)。
我从 this answer 知道可以用 rabbitmqctl stop && rabbitmqctl reset && rabbitmqctl start
重置 rabbitmq-instance - 但在 docker-image 的情况下,停止信号会杀死主容器进程(即 rabbitmq-server),进而导致 dockerd 杀死整个容器。
到目前为止我找到的唯一解决方案是 运行管理管理-api-插件,遍历所有队列、交换器、策略等并通过它删除它们 - 这反过来也需要一段时间,需要管理插件 运行.
是否可以通过 AMQP、其他一些 API-端点或 运行ning 命令以编程方式重置 运行ning rabbitmq-node,而不停止是第一个吗?
您所指的答案是正确的,因为您应该使用 stop_app
,而不是您消息中的 stop
。
两者之间有一个重要的区别:
stop
:
...stops RabbitMQ and its runtime (Erlang VM)
-
...stops the RabbitMQ application, leaving the runtime (Erlang VM) running
因为在包含Erlang VM的rabbitmq容器进程中是PID = 1
,停止它显然会导致容器停止。幸运的是,rabbitmq 作者 added stop_app
command specifically to improve 与测试相关的用户体验。
您所指的答案中的代码应该可以正常工作。这是与 one-liner:
相同的代码
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
$
我在一个项目中使用 RabbitMQ,并且运行正在针对它进行集成测试。由于测试需要彼此独立,我想在每次测试之前重置 RabbitMQ 实例,目前通过重新启动(自动创建的)RabbitMQ docker 容器来解决这个问题。但是,这非常慢(对于集成测试)。
我从 this answer 知道可以用 rabbitmqctl stop && rabbitmqctl reset && rabbitmqctl start
重置 rabbitmq-instance - 但在 docker-image 的情况下,停止信号会杀死主容器进程(即 rabbitmq-server),进而导致 dockerd 杀死整个容器。
到目前为止我找到的唯一解决方案是 运行管理管理-api-插件,遍历所有队列、交换器、策略等并通过它删除它们 - 这反过来也需要一段时间,需要管理插件 运行.
是否可以通过 AMQP、其他一些 API-端点或 运行ning 命令以编程方式重置 运行ning rabbitmq-node,而不停止是第一个吗?
您所指的答案是正确的,因为您应该使用 stop_app
,而不是您消息中的 stop
。
两者之间有一个重要的区别:
stop
:...stops RabbitMQ and its runtime (Erlang VM)
-
...stops the RabbitMQ application, leaving the runtime (Erlang VM) running
因为在包含Erlang VM的rabbitmq容器进程中是PID = 1
,停止它显然会导致容器停止。幸运的是,rabbitmq 作者 added stop_app
command specifically to improve 与测试相关的用户体验。
您所指的答案中的代码应该可以正常工作。这是与 one-liner:
相同的代码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
$