比如,我写了一个 Web Server 需要使用 MySQL 服务、 RabbitMQ 服务。其中 MySQL 库( mysqljs )自带了 Connection Pool 功能,能够自动处理连接失败等错误,而 RabbitMQ 库就没有带这个功能,只能用 amqp.createConnection 来创建一次性的连接。
那么我有两个问题要请教大家:
* 如何让应用代码来访问这些连接?
我的代码分为很多层,其中 Web Server 是顶层,提供了 REST API ;需要访问数据库、 MQ 的工具库等在最底层。
有两个可能的方式(请大佬们补充):
1. 创建 Web Server 时将连接对象传递进去,然后层层向下传。这样会让函数多出妨碍视觉的参数。
2. 直接创建一个文件 Connection Manager ,在应用程序启动时建立连接,并把连接 add 到这个 manager 里面。底层代码直接 require 这个 manager ,然后用类似于 `const mysqlconn = manager.get('mysql')` 这种方式来调用。
* 我是否应该手动实现一个连接池?是否有现成的轮子?
在应用程序运行过程中,如果 RabbitMQ 服务器挂掉或因故重启了,那么之前创建好的连接就无效了。这时应该直接让 Web Server 重启,还是使连接池重新建立连接?
请大家不吝指教,如果有的话能够给一些现成的开源代码参考一下。谢谢。
那么我有两个问题要请教大家:
* 如何让应用代码来访问这些连接?
我的代码分为很多层,其中 Web Server 是顶层,提供了 REST API ;需要访问数据库、 MQ 的工具库等在最底层。
有两个可能的方式(请大佬们补充):
1. 创建 Web Server 时将连接对象传递进去,然后层层向下传。这样会让函数多出妨碍视觉的参数。
2. 直接创建一个文件 Connection Manager ,在应用程序启动时建立连接,并把连接 add 到这个 manager 里面。底层代码直接 require 这个 manager ,然后用类似于 `const mysqlconn = manager.get('mysql')` 这种方式来调用。
* 我是否应该手动实现一个连接池?是否有现成的轮子?
在应用程序运行过程中,如果 RabbitMQ 服务器挂掉或因故重启了,那么之前创建好的连接就无效了。这时应该直接让 Web Server 重启,还是使连接池重新建立连接?
请大家不吝指教,如果有的话能够给一些现成的开源代码参考一下。谢谢。