Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js微服务在Rabbitmq重启后应如何生存?_Node.js_Docker_Docker Compose_Rabbitmq_Microservices - Fatal编程技术网

Node.js微服务在Rabbitmq重启后应如何生存?

Node.js微服务在Rabbitmq重启后应如何生存?,node.js,docker,docker-compose,rabbitmq,microservices,Node.js,Docker,Docker Compose,Rabbitmq,Microservices,我一直在研究一个使用Rabbitmq在Node.js微服务之间进行通信的示例,我试图了解这些微服务在Rabbitmq服务器重启后生存的最佳方式 Github上提供了完整示例: 您可以通过切换到广播子目录并使用docker compose up--build启动系统 运行该命令后,我打开另一个终端并发出以下命令来终止兔子服务器docker compose kill Rabbit 这会导致Node.js未处理异常终止连接到Rabbitmq服务器的发送方和接收方微服务 现在,我希望能够重新启动Rabb

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

Github上提供了完整示例:

您可以通过切换到广播子目录并使用
docker compose up--build
启动系统

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

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

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

这是为了在Docker Compose下进行开发,在Kubernetes下进行生产。我可以将其设置为,当微服务因与Rabbitmq断开连接而终止时,微服务将重新启动,但我更希望微服务能够保持在线(它们可能正在执行其他不应中断的工作),然后在Rabbitmq再次可用时自动重新连接到Rabbitmq


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

仅以发送方服务为例介绍如何处理它。 导致节点退出的错误是写入程序用户的流上没有“错误”处理程序

如果修改这部分代码。

将sender/src/index.js中的行从

const messagingConnection=等待重试(()=>amqp.connect(messagingHost),105000);

const messagingConnection=等待重试(()=>amqp.connect(messagingHost),105000)
.然后(x=>{
返回x.on('error',(err)=>{
console.log('connect stream on error',err)
});
});
只有错误处理程序意味着节点进程不再存在未处理的异常。这并不能使发送方代码正确,现在需要对其进行修改以了解是否有连接,如果有连接则只发送数据,如果没有连接则重试连接

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

当节点要求安装程序不退出时,这是一个有用的参考。

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

如果修改这部分代码。

将sender/src/index.js中的行从

const messagingConnection=等待重试(()=>amqp.connect(messagingHost),105000);

const messagingConnection=等待重试(()=>amqp.connect(messagingHost),105000)
.然后(x=>{
返回x.on('error',(err)=>{
console.log('connect stream on error',err)
});
});
只有错误处理程序意味着节点进程不再存在未处理的异常。这并不能使发送方代码正确,现在需要对其进行修改以了解是否有连接,如果有连接则只发送数据,如果没有连接则重试连接

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

当节点要求安装程序不退出时,这是一个有用的参考。

干杯。我现在正在处理错误和断开连接,然后在兔子服务器再次可用时尝试再次连接。我用一个名为“生存”的新例子更新了我的回购协议,展示了这项技术。干杯我现在正在处理错误和断开连接,然后在兔子服务器再次可用时尝试再次连接。我用一个名为“生存”的新例子更新了我的回购协议,展示了这项技术。