使Node.js的microService应该如何生存的RabbitMQ重启?

问题描述 投票:0回答:1

我一直使用的RabbitMQ对Node.js的微服务之间的通信的一个例子,我试图了解这些微服务生存的RabbitMQ重新启动服务器的最佳方式。

完整的例子可以在Github:https://github.com/ashleydavis/rabbit-messaging-example

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

与跑步我打开另一个终端并发出以下命令来终止兔服务器docker-compose kill rabbit

这将导致一个Node.js的未处理的异常杀死已连接到服务器的RabbitMQ我的发送者和接收者微服务。

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

这是为了在泊坞窗,撰写运行发展和Kubernetes进行生产。我可以只设置这使得微服务重新启动时,它们被从RabbitMQ的断开终止,但我更喜欢它,如果微服务可以保持在线(他们可能会做不应该被打断其他工作),然后重新连接当它再次变得可用时自动RabbitMQ的。

任何人都知道如何实现自动重新连接使用ampq库的RabbitMQ?

node.js docker docker-compose rabbitmq microservices
1个回答
1
投票

刚采摘发射服务就如何处理它的例子。这导致节点退出的错误是,这里是流笔者用户不用“错误”的处理程序。

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

改变从在发送器/ 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

© www.soinside.com 2019 - 2024. All rights reserved.