node-amqp - 在Express应用程序中处理连接的正确方法?

时间:2014-12-18 08:31:17

标签: node.js express rabbitmq node-amqp

我使用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" - 事件是eveytime,我称之为路线。我可能会认为这是因为Express服务http请求的方式 - 为每个被调用的路由执行server.js。因此,对于每个请求,都会创建一个connection的新实例,并在其上准备好"准备好" app尝试再创建一个Express服务器实例。

如何从我的应用程序的任何一点访问amqp_connection,但是在我需要向RabbitMQ推送内容的每一点都没有加倍require("amqp").createConnection()

UPD:或者Express可能没问题。 node-amqp似乎在创建后每秒触发就绪事件。不知道它是否是正确的行为

谢谢。

1 个答案:

答案 0 :(得分:0)

Ready事件触发多个'连接错误原因:

https://github.com/postwait/node-amqp/issues/255