【发布时间】:2014-12-18 08:31:17
【问题描述】:
我将 Express 与 node-amqp 一起使用。我的目标是在服务器启动之前创建 amqpConnection 并将其保存到全局对象中,并且在 Express 路由中使用之前创建的 globals.amqp_connection。
### server.coffee
app.use( ... )
...
# create RabbitMQ connection before server starts
connection = require("amqp").createConnection
host: "localhost"
connection.on "ready", ->
console.log "Got connection.on(\"ready\") event from node-amqp..."
# make amqp_connection accessible from any point of application
globals.amqp_connection = connection
server = globals.http.createServer(app).listen(8082)
console.log "Express server is listening 8082..."
问题是connection.on "ready"-event 每次我调用路由时都会触发。我可能认为这是因为 Express 服务 http-requests 的方式——为每个调用的路由执行 server.js。因此,对于每个请求,都会创建一个 connection 的新实例,并且“就绪”的应用程序会尝试在其上再创建一个 Express 服务器实例。
如何使 amqp_connection 可以从我的应用程序的任何点访问,但在我需要向 RabbitMQ 推送内容的每个点都不会加倍 require("amqp").createConnection()?
UPD: 或者 Express 可能没有问题。 node-amqp 似乎在创建后每秒触发一次就绪事件。不知道这样是否正确
谢谢。
【问题讨论】:
标签: node.js express rabbitmq node-amqp