- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在研究使用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)
});
});
关于node.js - Node.js微服务应如何在Rabbitmq重新启动后生存下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54471798/
我是一名优秀的程序员,十分优秀!