如何 运行 RabbitMQ 消费者使用 Docker - NodeJS
How to run RabbitMQ consumer using Docker - NodeJS
我有一个使用 RabbitMQ 的微服务应用程序。只有在 RabbitMQ 启动并 运行ning 之后,我如何才能从应用程序后端容器中 运行 RabbitMQ 消费者。我的撰写文件如下。
certichain_backend:
depends_on:
- rabbitmq
working_dir: /app/backend/src
command: sh sleep 20 & nohup node /app/backend/src/services/amqp_consumer.js && npm run start;
rabbitmq:
image: "rabbitmq:3-management"
hostname: "rabbitmq"
restart: always
expose:
- 15672
- 5672
labels:
NAME: "rabbitmq"
volumes:
- ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
我已经将后端 'depends_on' 交给了 rabbitmq。但我观察到的是,rabbitmq 容器启动过程已启动。但是后端容器并没有等待 rabbitmq 容器完全启动。我的消费者 运行 与后端一起使用。因此消费者无法连接到 amqp 服务器,因为此时它不是 运行ning。因此我添加了一个睡眠参数。以便在 rabbitmq 启动时有一些时间。
这个方法很不一致。我确定这不是实现此目标的正确方法。
在您的 nodejs 代码中,如果无法访问 rabbitmq 容器,您可以添加功能以使用出口 1 终止进程。
rabbitmq.connect('rabbitmq://guest:guest@rabbitmq',{})
.then(function(connection){
console.log('Rabbitmq connection established');
// other code here
})
.catch(function(errror) {
console.error('%s while dialing rabbitmq', error.message);
process.exit(1);
});
并且在docker-compose文件中你可以添加restart: on-failure
,这样,如果rabbitmq容器还没有启动,nodejs应用程序将无法启动并重新启动,直到rabbitmq容器就绪。
值得将 rabbitmq 连接建立作为 nodejs 应用程序执行的第一个操作之一 - 因此,如果没有 rabbitmq,则不会启动。
我有一个使用 RabbitMQ 的微服务应用程序。只有在 RabbitMQ 启动并 运行ning 之后,我如何才能从应用程序后端容器中 运行 RabbitMQ 消费者。我的撰写文件如下。
certichain_backend:
depends_on:
- rabbitmq
working_dir: /app/backend/src
command: sh sleep 20 & nohup node /app/backend/src/services/amqp_consumer.js && npm run start;
rabbitmq:
image: "rabbitmq:3-management"
hostname: "rabbitmq"
restart: always
expose:
- 15672
- 5672
labels:
NAME: "rabbitmq"
volumes:
- ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
我已经将后端 'depends_on' 交给了 rabbitmq。但我观察到的是,rabbitmq 容器启动过程已启动。但是后端容器并没有等待 rabbitmq 容器完全启动。我的消费者 运行 与后端一起使用。因此消费者无法连接到 amqp 服务器,因为此时它不是 运行ning。因此我添加了一个睡眠参数。以便在 rabbitmq 启动时有一些时间。
这个方法很不一致。我确定这不是实现此目标的正确方法。
在您的 nodejs 代码中,如果无法访问 rabbitmq 容器,您可以添加功能以使用出口 1 终止进程。
rabbitmq.connect('rabbitmq://guest:guest@rabbitmq',{})
.then(function(connection){
console.log('Rabbitmq connection established');
// other code here
})
.catch(function(errror) {
console.error('%s while dialing rabbitmq', error.message);
process.exit(1);
});
并且在docker-compose文件中你可以添加restart: on-failure
,这样,如果rabbitmq容器还没有启动,nodejs应用程序将无法启动并重新启动,直到rabbitmq容器就绪。
值得将 rabbitmq 连接建立作为 nodejs 应用程序执行的第一个操作之一 - 因此,如果没有 rabbitmq,则不会启动。