gpt4 book ai didi

node.js - Node.js微服务应如何在Rabbitmq重新启动后生存下来?

转载 作者:行者123 更新时间:2023-12-02 21:11:17 25 4
gpt4 key购买 nike

我一直在研究使用Rabbitmq在Node.js微服务之间进行通信的示例,并且我试图了解使这些微服务在Rabbitmq服务器重启后仍能生存的最佳方法。

完整的示例在Github上可用:https://github.com/ashleydavis/rabbit-messaging-example

您可以通过更改到广播子目录并使用docker-compose up --build来启动系统。

运行该命令后,我将打开另一个终端并发出以下命令以终止Rabbit服务器docker-compose kill rabbit

这会导致Node.js未处理的异常杀死我连接到Rabbitmq服务器的发送方和接收方微服务。

现在,我希望能够重新启动Rabbitmq服务器(使用docker-compose up rabbit)并使原始微服务重新联机。

它旨在在Docker-Compose下进行开发,在Kubernetes下进行生产。我可以进行设置,以使微服务在通过与Rabbitmq断开连接而终止时重新启动,但是如果微服务可以保持在线状态(它们可能正在做其他不应中断的工作)然后重新连接,则我更愿意这样做。到Rabbitmq再次可用时自动运行。

有人知道如何使用ampq库实现与Rabbitmq的自动重新连接吗?

最佳答案

仅以发送者服务为例说明如何处理它。
导致节点退出的错误是,在编写者用户的流上没有“错误”处理程序。

如果您修改了这部分代码。
https://github.com/ashleydavis/rabbit-messaging-example/blob/master/broadcast/sender/src/index.js#L13

从以下位置更改sender / src / index.js中的行

const messagingConnection = await retry(() => amqp.connect(messagingHost), 10, 5000);



const messagingConnection = await retry(() => amqp.connect(messagingHost), 10, 5000)
.then(x => {
return x.on('error', (err) => {
console.log('connect stream on error', err)
});
});

仅具有错误处理程序意味着节点进程不再存在未处理的异常。这不能使发送方代码正确,现在需要对其进行修改以了解其是否具有连接,仅在具有连接时才发送数据,而在没有连接时重试连接。

可以对接收器应用类似的修复程序

当节点要求安装程序不退出时,这是一个有用的引用。
https://medium.com/dailyjs/how-to-prevent-your-node-js-process-from-crashing-5d40247b8ab2

关于node.js - Node.js微服务应如何在Rabbitmq重新启动后生存下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54471798/

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